Skip to main content

rusty_cdk_core/iam/
dto.rs

1use 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}