pulumi_gestalt_rust/
output.rs

1use crate::{Context, GestaltContext, Output};
2use serde::Serialize;
3
4/// Generates Output<String> with formatted string. Supports up to 16 arguments.
5///
6/// Format string passed as first arguments is the same as in `format!` macro.
7/// ```no_run
8/// use anyhow::Result;
9/// use pulumi_gestalt_rust::*;
10///
11/// fn pulumi_main(context: &Context) -> Result<()> {
12///   let a = context.new_output(&1);
13///   let b = context.new_output(&"test".to_string());
14///   let formatted: Output<String> = pulumi_format!(context, "{} {}", a, b); // "1 test"
15///   Ok(())
16/// }
17#[macro_export]
18macro_rules! pulumi_format {
19    ($context:expr, $format:expr, $o1:expr) => {{ $o1.create_output(&$context).map(|a| format!($format, a)) }};
20    ($context:expr, $format:expr, $o1:expr, $o2:expr) => {{
21        pulumi_gestalt_rust::__private::output::combine2(
22            $o1.create_output(&$context),
23            $o2.create_output(&$context),
24        )
25        .map(|(a, b)| format!($format, a, b))
26    }};
27    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr) => {{
28        pulumi_gestalt_rust::__private::output::combine3(
29            $o1.create_output(&$context),
30            $o2.create_output(&$context),
31            $o3.create_output(&$context),
32        )
33        .map(|(a, b, c)| format!($format, a, b, c))
34    }};
35    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr) => {{
36        pulumi_gestalt_rust::__private::output::combine4(
37            $o1.create_output(&$context),
38            $o2.create_output(&$context),
39            $o3.create_output(&$context),
40            $o4.create_output(&$context),
41        )
42        .map(|(a, b, c, d)| format!($format, a, b, c, d))
43    }};
44    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr) => {{
45        pulumi_gestalt_rust::__private::output::combine5(
46            $o1.create_output(&$context),
47            $o2.create_output(&$context),
48            $o3.create_output(&$context),
49            $o4.create_output(&$context),
50            $o5.create_output(&$context),
51        )
52        .map(|(a, b, c, d, e)| format!($format, a, b, c, d, e))
53    }};
54    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr) => {{
55        pulumi_gestalt_rust::__private::output::combine6(
56            $o1.create_output(&$context),
57            $o2.create_output(&$context),
58            $o3.create_output(&$context),
59            $o4.create_output(&$context),
60            $o5.create_output(&$context),
61            $o6.create_output(&$context),
62        )
63        .map(|(a, b, c, d, e, f)| format!($format, a, b, c, d, e, f))
64    }};
65    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr) => {{
66        pulumi_gestalt_rust::__private::output::combine7(
67            $o1.create_output(&$context),
68            $o2.create_output(&$context),
69            $o3.create_output(&$context),
70            $o4.create_output(&$context),
71            $o5.create_output(&$context),
72            $o6.create_output(&$context),
73            $o7.create_output(&$context),
74        )
75        .map(|(a, b, c, d, e, f, g)| format!($format, a, b, c, d, e, f, g))
76    }};
77    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr) => {{
78        pulumi_gestalt_rust::__private::output::combine8(
79            $o1.create_output(&$context),
80            $o2.create_output(&$context),
81            $o3.create_output(&$context),
82            $o4.create_output(&$context),
83            $o5.create_output(&$context),
84            $o6.create_output(&$context),
85            $o7.create_output(&$context),
86            $o8.create_output(&$context),
87        )
88        .map(|(a, b, c, d, e, f, g, h)| format!($format, a, b, c, d, e, f, g, h))
89    }};
90    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr) => {{
91        pulumi_gestalt_rust::__private::output::combine9(
92            $o1.create_output(&$context),
93            $o2.create_output(&$context),
94            $o3.create_output(&$context),
95            $o4.create_output(&$context),
96            $o5.create_output(&$context),
97            $o6.create_output(&$context),
98            $o7.create_output(&$context),
99            $o8.create_output(&$context),
100            $o9.create_output(&$context),
101        )
102        .map(|(a, b, c, d, e, f, g, h, i)| format!($format, a, b, c, d, e, f, g, h, i))
103    }};
104    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr) => {{
105        pulumi_gestalt_rust::__private::output::combine10(
106            $o1.create_output(&$context),
107            $o2.create_output(&$context),
108            $o3.create_output(&$context),
109            $o4.create_output(&$context),
110            $o5.create_output(&$context),
111            $o6.create_output(&$context),
112            $o7.create_output(&$context),
113            $o8.create_output(&$context),
114            $o9.create_output(&$context),
115            $o10.create_output(&$context),
116        )
117        .map(|(a, b, c, d, e, f, g, h, i, j)| format!($format, a, b, c, d, e, f, g, h, i, j))
118    }};
119    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr) => {{
120        pulumi_gestalt_rust::__private::output::combine11(
121            $o1.create_output(&$context),
122            $o2.create_output(&$context),
123            $o3.create_output(&$context),
124            $o4.create_output(&$context),
125            $o5.create_output(&$context),
126            $o6.create_output(&$context),
127            $o7.create_output(&$context),
128            $o8.create_output(&$context),
129            $o9.create_output(&$context),
130            $o10.create_output(&$context),
131            $o11.create_output(&$context),
132        )
133        .map(|(a, b, c, d, e, f, g, h, i, j, k)| format!($format, a, b, c, d, e, f, g, h, i, j, k))
134    }};
135    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr, $o12:expr) => {{
136        pulumi_gestalt_rust::__private::output::combine12(
137            $o1.create_output(&$context),
138            $o2.create_output(&$context),
139            $o3.create_output(&$context),
140            $o4.create_output(&$context),
141            $o5.create_output(&$context),
142            $o6.create_output(&$context),
143            $o7.create_output(&$context),
144            $o8.create_output(&$context),
145            $o9.create_output(&$context),
146            $o10.create_output(&$context),
147            $o11.create_output(&$context),
148            $o12.create_output(&$context),
149        )
150        .map(|(a, b, c, d, e, f, g, h, i, j, k, l)| {
151            format!($format, a, b, c, d, e, f, g, h, i, j, k, l)
152        })
153    }};
154    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr, $o12:expr, $o13:expr) => {{
155        pulumi_gestalt_rust::__private::output::combine13(
156            $o1.create_output(&$context),
157            $o2.create_output(&$context),
158            $o3.create_output(&$context),
159            $o4.create_output(&$context),
160            $o5.create_output(&$context),
161            $o6.create_output(&$context),
162            $o7.create_output(&$context),
163            $o8.create_output(&$context),
164            $o9.create_output(&$context),
165            $o10.create_output(&$context),
166            $o11.create_output(&$context),
167            $o12.create_output(&$context),
168            $o13.create_output(&$context),
169        )
170        .map(|(a, b, c, d, e, f, g, h, i, j, k, l, m)| {
171            format!($format, a, b, c, d, e, f, g, h, i, j, k, l, m)
172        })
173    }};
174
175    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr, $o12:expr, $o13:expr, $o14:expr) => {{
176        pulumi_gestalt_rust::__private::output::combine14(
177            $o1.create_output(&$context),
178            $o2.create_output(&$context),
179            $o3.create_output(&$context),
180            $o4.create_output(&$context),
181            $o5.create_output(&$context),
182            $o6.create_output(&$context),
183            $o7.create_output(&$context),
184            $o8.create_output(&$context),
185            $o9.create_output(&$context),
186            $o10.create_output(&$context),
187            $o11.create_output(&$context),
188            $o12.create_output(&$context),
189            $o13.create_output(&$context),
190            $o14.create_output(&$context),
191        )
192        .map(|(a, b, c, d, e, f, g, h, i, j, k, l, m, n)| {
193            format!($format, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
194        })
195    }};
196
197    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr, $o12:expr, $o13:expr, $o14:expr, $o15:expr) => {{
198        pulumi_gestalt_rust::__private::output::combine15(
199            $o1.create_output(&$context),
200            $o2.create_output(&$context),
201            $o3.create_output(&$context),
202            $o4.create_output(&$context),
203            $o5.create_output(&$context),
204            $o6.create_output(&$context),
205            $o7.create_output(&$context),
206            $o8.create_output(&$context),
207            $o9.create_output(&$context),
208            $o10.create_output(&$context),
209            $o11.create_output(&$context),
210            $o12.create_output(&$context),
211            $o13.create_output(&$context),
212            $o14.create_output(&$context),
213            $o15.create_output(&$context),
214        )
215        .map(|(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)| {
216            format!($format, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
217        })
218    }};
219
220    ($context:expr, $format:expr, $o1:expr, $o2:expr, $o3:expr, $o4:expr, $o5:expr, $o6:expr, $o7:expr, $o8:expr, $o9:expr, $o10:expr, $o11:expr, $o12:expr, $o13:expr, $o14:expr, $o15:expr, $o16:expr) => {{
221        pulumi_gestalt_rust::__private::output::combine16(
222            $o1.create_output(&$context),
223            $o2.create_output(&$context),
224            $o3.create_output(&$context),
225            $o4.create_output(&$context),
226            $o5.create_output(&$context),
227            $o6.create_output(&$context),
228            $o7.create_output(&$context),
229            $o8.create_output(&$context),
230            $o9.create_output(&$context),
231            $o10.create_output(&$context),
232            $o11.create_output(&$context),
233            $o12.create_output(&$context),
234            $o13.create_output(&$context),
235            $o14.create_output(&$context),
236            $o15.create_output(&$context),
237            $o16.create_output(&$context),
238        )
239        .map(|(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)| {
240            format!($format, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
241        })
242    }};
243    ($($arg:expr),+) => {
244        compile_error!("pulumi_format! macro supports up to 16 arguments")
245    };
246}
247
248/// Combine multiple Outputs into a single Output of [tuple] type. Supports up to 16 arguments.
249/// ```no_run
250/// use anyhow::Result;
251/// use pulumi_gestalt_rust::*;
252///
253/// fn pulumi_main(context: &Context) -> Result<()> {
254///   let a = context.new_output(&1);
255///   let b = context.new_output(&"test".to_string());
256///   let combined: Output<(i32, String)> = pulumi_combine!(a, b);
257///   Ok(())
258/// }
259/// ```
260#[macro_export]
261macro_rules! pulumi_combine {
262    ($arg1:expr, $arg2:expr) => {
263        pulumi_gestalt_rust::__private::output::combine2($arg1, $arg2)
264    };
265    ($arg1:expr, $arg2:expr, $arg3:expr) => {
266        pulumi_gestalt_rust::__private::output::combine3($arg1, $arg2, $arg3)
267    };
268    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr) => {
269        pulumi_gestalt_rust::__private::output::combine4($arg1, $arg2, $arg3, $arg4)
270    };
271    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr) => {
272        pulumi_gestalt_rust::__private::output::combine5($arg1, $arg2, $arg3, $arg4, $arg5)
273    };
274    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr) => {
275        pulumi_gestalt_rust::__private::output::combine6($arg1, $arg2, $arg3, $arg4, $arg5, $arg6)
276    };
277    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr) => {
278        pulumi_gestalt_rust::__private::output::combine7(
279            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7,
280        )
281    };
282    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr) => {
283        pulumi_gestalt_rust::__private::output::combine8(
284            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8,
285        )
286    };
287    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr) => {
288        pulumi_gestalt_rust::__private::output::combine9(
289            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9,
290        )
291    };
292    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr) => {
293        pulumi_gestalt_rust::__private::output::combine10(
294            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10,
295        )
296    };
297    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr) => {
298        pulumi_gestalt_rust::__private::output::combine11(
299            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11,
300        )
301    };
302    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr, $arg12:expr) => {
303        pulumi_gestalt_rust::__private::output::combine12(
304            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11, $arg12,
305        )
306    };
307    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr, $arg12:expr, $arg13:expr) => {
308        pulumi_gestalt_rust::__private::output::combine13(
309            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11, $arg12,
310            $arg13,
311        )
312    };
313    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr, $arg12:expr, $arg13:expr, $arg14:expr) => {
314        pulumi_gestalt_rust::__private::output::combine14(
315            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11, $arg12,
316            $arg13, $arg14,
317        )
318    };
319    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr, $arg12:expr, $arg13:expr, $arg14:expr, $arg15:expr) => {
320        pulumi_gestalt_rust::__private::output::combine15(
321            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11, $arg12,
322            $arg13, $arg14, $arg15,
323        )
324    };
325    ($arg1:expr, $arg2:expr, $arg3:expr, $arg4:expr, $arg5:expr, $arg6:expr, $arg7:expr, $arg8:expr, $arg9:expr, $arg10:expr, $arg11:expr, $arg12:expr, $arg13:expr, $arg14:expr, $arg15:expr, $arg16:expr) => {
326        pulumi_gestalt_rust::__private::output::combine16(
327            $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10, $arg11, $arg12,
328            $arg13, $arg14, $arg15, $arg16,
329        )
330    };
331    ($($arg:expr),+) => {
332        compile_error!("pulumi_combine! macro supports up to 16 arguments")
333    };
334}
335
336/// Helper trait utilized in [pulumi_format!](`crate::pulumi_format!`) macro
337pub trait ToOutput<T> {
338    fn create_output(&self, engine: &Context) -> Output<T>;
339}
340
341impl<T: Serialize> ToOutput<T> for T {
342    fn create_output(&self, engine: &Context) -> Output<T> {
343        engine.new_output(self)
344    }
345}
346
347impl<T> ToOutput<T> for Output<T> {
348    fn create_output(&self, _: &Context) -> Output<T> {
349        self.clone()
350    }
351}