Skip to main content

pulumi_gestalt_rust/
input.rs

1use crate::{Context, Output};
2
3/// Wrapper for either static value or [Output]
4pub enum Input<T> {
5    StaticValue(T),
6    Output(Output<T>),
7}
8
9impl<T> Input<T>
10where
11    T: Clone + Send + Sync + 'static,
12{
13    #[doc(hidden)]
14    pub fn get_output(self, _engine: &Context) -> Output<T> {
15        match self {
16            Input::StaticValue(value) => Output::new(value),
17            Input::Output(output) => output,
18        }
19    }
20}
21
22impl<T> From<Output<T>> for Input<T> {
23    fn from(output: Output<T>) -> Self {
24        Input::Output(output)
25    }
26}
27
28impl<T: Default> Default for Input<T> {
29    fn default() -> Self {
30        Input::StaticValue(Default::default())
31    }
32}
33
34impl<T> From<T> for Input<T> {
35    fn from(value: T) -> Input<T> {
36        Input::StaticValue(value)
37    }
38}
39
40impl<T> From<T> for Input<Option<T>> {
41    fn from(value: T) -> Self {
42        Input::StaticValue(Some(value))
43    }
44}
45
46impl<T: Clone + Send + Sync + 'static> From<Output<T>> for Input<Option<T>> {
47    fn from(output: Output<T>) -> Self {
48        Input::Output(output.map(|v| Some(v)))
49    }
50}
51
52impl From<&str> for Input<String> {
53    fn from(value: &str) -> Self {
54        Input::StaticValue(value.to_string())
55    }
56}
57
58impl From<&str> for Input<Option<String>> {
59    fn from(value: &str) -> Self {
60        Input::StaticValue(Some(value.to_string()))
61    }
62}
63
64impl From<Vec<&str>> for Input<Vec<String>> {
65    fn from(value: Vec<&str>) -> Self {
66        Input::StaticValue(value.into_iter().map(|s| s.to_string()).collect())
67    }
68}
69
70impl From<Vec<&str>> for Input<Option<Vec<String>>> {
71    fn from(value: Vec<&str>) -> Self {
72        Input::StaticValue(Some(value.into_iter().map(|s| s.to_string()).collect()))
73    }
74}
75
76impl<T, const N: usize> From<[T; N]> for Input<Vec<T>> {
77    fn from(value: [T; N]) -> Self {
78        Input::StaticValue(value.into_iter().collect())
79    }
80}
81
82impl<T, const N: usize> From<[T; N]> for Input<Option<Vec<T>>> {
83    fn from(value: [T; N]) -> Self {
84        Input::StaticValue(Some(value.into_iter().collect()))
85    }
86}
87
88impl<const N: usize> From<[&str; N]> for Input<Vec<String>> {
89    fn from(value: [&str; N]) -> Self {
90        Input::StaticValue(value.into_iter().map(|s| s.to_string()).collect())
91    }
92}
93
94impl<const N: usize> From<[&str; N]> for Input<Option<Vec<String>>> {
95    fn from(value: [&str; N]) -> Self {
96        Input::StaticValue(Some(value.into_iter().map(|s| s.to_string()).collect()))
97    }
98}