terrars_integrations_github/github/
provider.rs

1use serde::Serialize;
2use std::cell::RefCell;
3use std::rc::Rc;
4use terrars::*;
5
6#[derive(Serialize)]
7struct ProviderGithubData {
8    #[serde(skip_serializing_if = "Option::is_none")]
9    alias: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    base_url: Option<PrimField<String>>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    insecure: Option<PrimField<bool>>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    organization: Option<PrimField<String>>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    owner: Option<PrimField<String>>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    parallel_requests: Option<PrimField<bool>>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    read_delay_ms: Option<PrimField<f64>>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    token: Option<PrimField<String>>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    write_delay_ms: Option<PrimField<f64>>,
26}
27
28struct ProviderGithub_ {
29    data: RefCell<ProviderGithubData>,
30}
31
32pub struct ProviderGithub(Rc<ProviderGithub_>);
33
34impl ProviderGithub {
35    pub fn provider_ref(&self) -> String {
36        let data = self.0.data.borrow();
37        if let Some(alias) = &data.alias {
38            format!("{}.{}", "github", alias)
39        } else {
40            "github".into()
41        }
42    }
43
44    pub fn set_alias(self, alias: impl ToString) -> Self {
45        self.0.data.borrow_mut().alias = Some(alias.to_string());
46        self
47    }
48
49    #[doc= "Set the field `base_url`.\nThe GitHub Base API URL"]
50    pub fn set_base_url(self, v: impl Into<PrimField<String>>) -> Self {
51        self.0.data.borrow_mut().base_url = Some(v.into());
52        self
53    }
54
55    #[doc= "Set the field `insecure`.\nEnable `insecure` mode for testing purposes"]
56    pub fn set_insecure(self, v: impl Into<PrimField<bool>>) -> Self {
57        self.0.data.borrow_mut().insecure = Some(v.into());
58        self
59    }
60
61    #[doc= "Set the field `organization`.\nThe GitHub organization name to manage. Use this field instead of `owner` when managing organization accounts."]
62    pub fn set_organization(self, v: impl Into<PrimField<String>>) -> Self {
63        self.0.data.borrow_mut().organization = Some(v.into());
64        self
65    }
66
67    #[doc= "Set the field `owner`.\nThe GitHub owner name to manage. Use this field instead of `organization` when managing individual accounts."]
68    pub fn set_owner(self, v: impl Into<PrimField<String>>) -> Self {
69        self.0.data.borrow_mut().owner = Some(v.into());
70        self
71    }
72
73    #[doc= "Set the field `parallel_requests`.\nAllow the provider to make parallel API calls to GitHub. You may want to set it to true when you have a private Github Enterprise without strict rate limits. Although, it is not possible to enable this setting on github.com because we enforce the respect of github.com's best practices to avoid hitting abuse rate limitsDefaults to false if not set"]
74    pub fn set_parallel_requests(self, v: impl Into<PrimField<bool>>) -> Self {
75        self.0.data.borrow_mut().parallel_requests = Some(v.into());
76        self
77    }
78
79    #[doc= "Set the field `read_delay_ms`.\nAmount of time in milliseconds to sleep in between non-write requests to GitHub API. Defaults to 0ms if not set."]
80    pub fn set_read_delay_ms(self, v: impl Into<PrimField<f64>>) -> Self {
81        self.0.data.borrow_mut().read_delay_ms = Some(v.into());
82        self
83    }
84
85    #[doc= "Set the field `token`.\nThe OAuth token used to connect to GitHub. Anonymous mode is enabled if both `token` and `app_auth` are not set."]
86    pub fn set_token(self, v: impl Into<PrimField<String>>) -> Self {
87        self.0.data.borrow_mut().token = Some(v.into());
88        self
89    }
90
91    #[doc= "Set the field `write_delay_ms`.\nAmount of time in milliseconds to sleep in between writes to GitHub API. Defaults to 1000ms or 1s if not set."]
92    pub fn set_write_delay_ms(self, v: impl Into<PrimField<f64>>) -> Self {
93        self.0.data.borrow_mut().write_delay_ms = Some(v.into());
94        self
95    }
96}
97
98impl Provider for ProviderGithub_ {
99    fn extract_type_tf_id(&self) -> String {
100        "github".into()
101    }
102
103    fn extract_provider_type(&self) -> serde_json::Value {
104        serde_json::json!({
105            "source": "integrations/github",
106            "version": "5.43.0",
107        })
108    }
109
110    fn extract_provider(&self) -> serde_json::Value {
111        serde_json::to_value(&self.data).unwrap()
112    }
113}
114
115pub struct BuildProviderGithub {}
116
117impl BuildProviderGithub {
118    pub fn build(self, stack: &mut Stack) -> ProviderGithub {
119        let out = ProviderGithub(Rc::new(ProviderGithub_ { data: RefCell::new(ProviderGithubData {
120            alias: None,
121            base_url: core::default::Default::default(),
122            insecure: core::default::Default::default(),
123            organization: core::default::Default::default(),
124            owner: core::default::Default::default(),
125            parallel_requests: core::default::Default::default(),
126            read_delay_ms: core::default::Default::default(),
127            token: core::default::Default::default(),
128            write_delay_ms: core::default::Default::default(),
129        }) }));
130        stack.add_provider(out.0.clone());
131        out
132    }
133}