pulumi_gestalt_rust/
lib.rs1mod macros;
2pub use macros::ToOutput;
3mod native;
4
5#[doc(hidden)]
6#[path = "private/mod.rs"]
7pub mod __private;
8mod input;
9mod oneof;
10mod pulumi_any;
11pub mod resources;
12pub mod stdlib;
13
14pub use input::Input;
15pub use pulumi_any::{PulumiAny, ToPulumiAny};
16
17pub use oneof::OneOf2;
18pub use oneof::OneOf3;
19pub use oneof::OneOf4;
20
21use anyhow::{Context as AnyhowContext, Result};
22pub use native::{
23 CompositeOutput, Context, CustomResourceOptions, InvokeResourceRequest, Provider,
24 RegisterResourceRequest, ResourceRequestObjectField,
25};
26pub use pulumi_gestalt_model::FromPulumiValue;
27pub use pulumi_gestalt_model::Output;
28pub use pulumi_gestalt_model::ToPulumiValue;
29use serde::{Deserialize, Serialize};
30use std::collections::BTreeMap;
31
32#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
33pub struct PackageParameterization {
34 pub name: String,
35 pub version: String,
36 pub value: Vec<u8>,
37}
38
39#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
40pub struct Package {
41 pub name: String,
42 pub kind: String,
43 pub version: String,
44 pub server: String,
45 pub checksums: BTreeMap<String, Vec<u8>>,
46 pub parameterization: Option<PackageParameterization>,
47}
48
49pub fn run<F: Fn(&Context) -> Result<()>>(f: F) -> Result<()> {
58 run_with_packages(vec![], f)
59}
60
61pub fn run_with_packages<F: Fn(&Context) -> Result<()>>(
62 packages: Vec<Package>,
63 f: F,
64) -> Result<()> {
65 if try_write_packages_from_args(&packages)? {
66 return Ok(());
67 }
68
69 let ctx = Context::new();
70 f(&ctx).context("Failed to run Pulumi program")?;
71 ctx.finish();
72 Ok(())
73}
74
75fn try_write_packages_from_args(packages: &[Package]) -> Result<bool> {
76 let args = std::env::args().collect::<Vec<_>>();
77 if args.len() >= 3 && args[1] == "get-packages" {
78 let output_path = &args[2];
79 let serialized =
80 serde_json::to_string(packages).context("Failed to serialize packages metadata")?;
81 std::fs::write(output_path, serialized)
82 .with_context(|| format!("Failed to write packages file at [{output_path}]"))?;
83 return Ok(true);
84 }
85
86 Ok(false)
87}
88
89#[macro_export]
105macro_rules! include_provider {
106 ($file:expr) => {
107 include!(concat!(env!("OUT_DIR"), "/pulumi/", $file, "/lib.rs"));
108 };
109}