use serde::Serialize;
use std::cell::RefCell;
use std::rc::Rc;
use terrars::*;
use super::provider::ProviderGithub;
#[derive(Serialize)]
struct RepositoryCollaboratorData {
#[serde(skip_serializing_if = "Vec::is_empty")]
depends_on: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
provider: Option<String>,
#[serde(skip_serializing_if = "SerdeSkipDefault::is_default")]
lifecycle: ResourceLifecycle,
#[serde(skip_serializing_if = "Option::is_none")]
for_each: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
id: Option<PrimField<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
permission: Option<PrimField<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
permission_diff_suppression: Option<PrimField<bool>>,
repository: PrimField<String>,
username: PrimField<String>,
}
struct RepositoryCollaborator_ {
shared: StackShared,
tf_id: String,
data: RefCell<RepositoryCollaboratorData>,
}
#[derive(Clone)]
pub struct RepositoryCollaborator(Rc<RepositoryCollaborator_>);
impl RepositoryCollaborator {
fn shared(&self) -> &StackShared {
&self.0.shared
}
pub fn depends_on(self, dep: &impl Referable) -> Self {
self.0.data.borrow_mut().depends_on.push(dep.extract_ref());
self
}
pub fn set_provider(self, provider: &ProviderGithub) -> Self {
self.0.data.borrow_mut().provider = Some(provider.provider_ref());
self
}
pub fn set_create_before_destroy(self, v: bool) -> Self {
self.0.data.borrow_mut().lifecycle.create_before_destroy = v;
self
}
pub fn set_prevent_destroy(self, v: bool) -> Self {
self.0.data.borrow_mut().lifecycle.prevent_destroy = v;
self
}
pub fn ignore_changes_to_all(self) -> Self {
self.0.data.borrow_mut().lifecycle.ignore_changes = Some(IgnoreChanges::All(IgnoreChangesAll::All));
self
}
pub fn ignore_changes_to_attr(self, attr: impl ToString) -> Self {
{
let mut d = self.0.data.borrow_mut();
if match &mut d.lifecycle.ignore_changes {
Some(i) => match i {
IgnoreChanges::All(_) => {
true
},
IgnoreChanges::Refs(r) => {
r.push(attr.to_string());
false
},
},
None => true,
} {
d.lifecycle.ignore_changes = Some(IgnoreChanges::Refs(vec![attr.to_string()]));
}
}
self
}
pub fn replace_triggered_by_resource(self, r: &impl Resource) -> Self {
self.0.data.borrow_mut().lifecycle.replace_triggered_by.push(r.extract_ref());
self
}
pub fn replace_triggered_by_attr(self, attr: impl ToString) -> Self {
self.0.data.borrow_mut().lifecycle.replace_triggered_by.push(attr.to_string());
self
}
#[doc= "Set the field `id`.\n"]
pub fn set_id(self, v: impl Into<PrimField<String>>) -> Self {
self.0.data.borrow_mut().id = Some(v.into());
self
}
#[doc= "Set the field `permission`.\nThe permission of the outside collaborator for the repository. Must be one of 'pull', 'push', 'maintain', 'triage' or 'admin' or the name of an existing custom repository role within the organization for organization-owned repositories. Must be 'push' for personal repositories. Defaults to 'push'."]
pub fn set_permission(self, v: impl Into<PrimField<String>>) -> Self {
self.0.data.borrow_mut().permission = Some(v.into());
self
}
#[doc= "Set the field `permission_diff_suppression`.\nSuppress plan diffs for triage and maintain. Defaults to 'false'."]
pub fn set_permission_diff_suppression(self, v: impl Into<PrimField<bool>>) -> Self {
self.0.data.borrow_mut().permission_diff_suppression = Some(v.into());
self
}
#[doc= "Get a reference to the value of field `id` after provisioning.\n"]
pub fn id(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.id", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `invitation_id` after provisioning.\nID of the invitation to be used in 'github_user_invitation_accepter'"]
pub fn invitation_id(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.invitation_id", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `permission` after provisioning.\nThe permission of the outside collaborator for the repository. Must be one of 'pull', 'push', 'maintain', 'triage' or 'admin' or the name of an existing custom repository role within the organization for organization-owned repositories. Must be 'push' for personal repositories. Defaults to 'push'."]
pub fn permission(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.permission", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `permission_diff_suppression` after provisioning.\nSuppress plan diffs for triage and maintain. Defaults to 'false'."]
pub fn permission_diff_suppression(&self) -> PrimExpr<bool> {
PrimExpr::new(self.shared().clone(), format!("{}.permission_diff_suppression", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `repository` after provisioning.\nThe GitHub repository"]
pub fn repository(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.repository", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `username` after provisioning.\nThe user to add to the repository as a collaborator."]
pub fn username(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.username", self.extract_ref()))
}
}
impl Referable for RepositoryCollaborator {
fn extract_ref(&self) -> String {
format!("{}.{}", self.0.extract_resource_type(), self.0.extract_tf_id())
}
}
impl Resource for RepositoryCollaborator { }
impl ToListMappable for RepositoryCollaborator {
type O = ListRef<RepositoryCollaboratorRef>;
fn do_map(self, base: String) -> Self::O {
self.0.data.borrow_mut().for_each = Some(format!("${{{}}}", base));
ListRef::new(self.0.shared.clone(), self.extract_ref())
}
}
impl Resource_ for RepositoryCollaborator_ {
fn extract_resource_type(&self) -> String {
"github_repository_collaborator".into()
}
fn extract_tf_id(&self) -> String {
self.tf_id.clone()
}
fn extract_value(&self) -> serde_json::Value {
serde_json::to_value(&self.data).unwrap()
}
}
pub struct BuildRepositoryCollaborator {
pub tf_id: String,
#[doc= "The GitHub repository"]
pub repository: PrimField<String>,
#[doc= "The user to add to the repository as a collaborator."]
pub username: PrimField<String>,
}
impl BuildRepositoryCollaborator {
pub fn build(self, stack: &mut Stack) -> RepositoryCollaborator {
let out = RepositoryCollaborator(Rc::new(RepositoryCollaborator_ {
shared: stack.shared.clone(),
tf_id: self.tf_id,
data: RefCell::new(RepositoryCollaboratorData {
depends_on: core::default::Default::default(),
provider: None,
lifecycle: core::default::Default::default(),
for_each: None,
id: core::default::Default::default(),
permission: core::default::Default::default(),
permission_diff_suppression: core::default::Default::default(),
repository: self.repository,
username: self.username,
}),
}));
stack.add_resource(out.0.clone());
out
}
}
pub struct RepositoryCollaboratorRef {
shared: StackShared,
base: String,
}
impl Ref for RepositoryCollaboratorRef {
fn new(shared: StackShared, base: String) -> Self {
Self {
shared: shared,
base: base,
}
}
}
impl RepositoryCollaboratorRef {
fn extract_ref(&self) -> String {
self.base.clone()
}
fn shared(&self) -> &StackShared {
&self.shared
}
#[doc= "Get a reference to the value of field `id` after provisioning.\n"]
pub fn id(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.id", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `invitation_id` after provisioning.\nID of the invitation to be used in 'github_user_invitation_accepter'"]
pub fn invitation_id(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.invitation_id", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `permission` after provisioning.\nThe permission of the outside collaborator for the repository. Must be one of 'pull', 'push', 'maintain', 'triage' or 'admin' or the name of an existing custom repository role within the organization for organization-owned repositories. Must be 'push' for personal repositories. Defaults to 'push'."]
pub fn permission(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.permission", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `permission_diff_suppression` after provisioning.\nSuppress plan diffs for triage and maintain. Defaults to 'false'."]
pub fn permission_diff_suppression(&self) -> PrimExpr<bool> {
PrimExpr::new(self.shared().clone(), format!("{}.permission_diff_suppression", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `repository` after provisioning.\nThe GitHub repository"]
pub fn repository(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.repository", self.extract_ref()))
}
#[doc= "Get a reference to the value of field `username` after provisioning.\nThe user to add to the repository as a collaborator."]
pub fn username(&self) -> PrimExpr<String> {
PrimExpr::new(self.shared().clone(), format!("{}.username", self.extract_ref()))
}
}