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