terrars_integrations_github/github/
provider.rs1use 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}