Skip to main content

pulumi_gestalt_rust/
input.rs

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