pulumi_gestalt_rust/
input.rs1use crate::{Context, Output};
2use std::collections::BTreeMap;
3
4pub 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}