rusty_cdk_core/iam/
dto.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use crate::{dto_methods, ref_struct};
4use crate::shared::Id;
5
6#[derive(Debug, Serialize, Deserialize)]
7pub(crate) enum RoleType {
8 #[serde(rename = "AWS::IAM::Role")]
9 RoleType
10}
11
12ref_struct!(RoleRef);
13
14#[derive(Debug, Serialize, Deserialize)]
15pub struct Role {
16 #[serde(skip)]
17 pub(crate) id: Id,
18 #[serde(skip)]
19 pub(crate) resource_id: String,
20 #[serde(skip)]
21 pub(crate) potentially_missing_services: Vec<String>,
22 #[serde(rename = "Type")]
23 pub(crate) r#type: RoleType,
24 #[serde(rename = "Properties")]
25 pub(crate) properties: IamRoleProperties,
26}
27dto_methods!(Role);
28
29#[derive(Debug, Serialize, Deserialize)]
30pub struct IamRoleProperties {
31 #[serde(rename = "AssumeRolePolicyDocument")]
32 pub(crate) assumed_role_policy_document: AssumeRolePolicyDocument,
33 #[serde(rename = "ManagedPolicyArns")]
34 pub(crate) managed_policy_arns: Vec<Value>,
35 #[serde(rename = "Policies", skip_serializing_if = "Option::is_none")]
36 pub(crate) policies: Option<Vec<Policy>>,
37 #[serde(rename = "RoleName", skip_serializing_if = "Option::is_none")]
38 pub(crate) role_name: Option<String>,
39}
40
41#[derive(Debug, Serialize, Deserialize)]
42pub struct Policy {
43 #[serde(rename = "PolicyName")]
44 pub(crate) policy_name: String,
45 #[serde(rename = "PolicyDocument")]
46 pub(crate) policy_document: PolicyDocument,
47}
48
49#[derive(Debug, Serialize, Deserialize)]
50pub struct PolicyDocument {
51 #[serde(rename = "Version")]
52 pub(crate) version: String,
53 #[serde(rename = "Statement")]
54 pub(crate) statements: Vec<Statement>
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58pub struct AssumeRolePolicyDocument {
59 #[serde(rename = "Statement")]
60 pub(crate) statements: Vec<Statement>,
61 #[serde(rename = "Version")]
62 pub(crate) version: String,
63}
64
65#[derive(Debug, Serialize, Deserialize)]
66pub struct Statement {
67 #[serde(rename = "Action")]
68 pub(crate) action: Vec<String>,
69 #[serde(rename = "Effect")]
70 pub(crate) effect: String,
71 #[serde(rename = "Principal", skip_serializing_if = "Option::is_none")]
72 pub(crate) principal: Option<Principal>,
73 #[serde(rename = "Resource", skip_serializing_if = "Option::is_none")]
74 pub(crate) resource: Option<Vec<Value>>,
75 #[serde(rename = "Condition", skip_serializing_if = "Option::is_none")]
76 pub(crate) condition: Option<Value>
77}
78
79#[derive(Debug, Serialize, Deserialize)]
80#[serde(untagged)]
81pub enum Principal {
82 Service(ServicePrincipal),
83 AWS(AWSPrincipal),
84 Custom(String),
85}
86
87#[derive(Debug, Serialize, Deserialize)]
88pub struct ServicePrincipal {
89 #[serde(rename = "Service")]
90 pub(crate) service: String,
91}
92
93#[derive(Debug, Serialize, Deserialize)]
94pub struct AWSPrincipal {
95 #[serde(rename = "AWS")]
96 pub(crate) aws: String,
97}