1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.

/// <p>Specifies the S3 Intelligent-Tiering configuration for an Amazon S3 bucket.</p>
/// <p>For information about the S3 Intelligent-Tiering storage class, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p>
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct IntelligentTieringConfiguration {
    /// <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
    pub id: ::std::string::String,
    /// <p>Specifies a bucket filter. The configuration only includes objects that meet the filter's criteria.</p>
    pub filter: ::std::option::Option<crate::types::IntelligentTieringFilter>,
    /// <p>Specifies the status of the configuration.</p>
    pub status: crate::types::IntelligentTieringStatus,
    /// <p>Specifies the S3 Intelligent-Tiering storage class tier of the configuration.</p>
    pub tierings: ::std::vec::Vec<crate::types::Tiering>,
}
impl IntelligentTieringConfiguration {
    /// <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
    pub fn id(&self) -> &str {
        use std::ops::Deref;
        self.id.deref()
    }
    /// <p>Specifies a bucket filter. The configuration only includes objects that meet the filter's criteria.</p>
    pub fn filter(&self) -> ::std::option::Option<&crate::types::IntelligentTieringFilter> {
        self.filter.as_ref()
    }
    /// <p>Specifies the status of the configuration.</p>
    pub fn status(&self) -> &crate::types::IntelligentTieringStatus {
        &self.status
    }
    /// <p>Specifies the S3 Intelligent-Tiering storage class tier of the configuration.</p>
    pub fn tierings(&self) -> &[crate::types::Tiering] {
        use std::ops::Deref;
        self.tierings.deref()
    }
}
impl IntelligentTieringConfiguration {
    /// Creates a new builder-style object to manufacture [`IntelligentTieringConfiguration`](crate::types::IntelligentTieringConfiguration).
    pub fn builder() -> crate::types::builders::IntelligentTieringConfigurationBuilder {
        crate::types::builders::IntelligentTieringConfigurationBuilder::default()
    }
}

/// A builder for [`IntelligentTieringConfiguration`](crate::types::IntelligentTieringConfiguration).
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
pub struct IntelligentTieringConfigurationBuilder {
    pub(crate) id: ::std::option::Option<::std::string::String>,
    pub(crate) filter: ::std::option::Option<crate::types::IntelligentTieringFilter>,
    pub(crate) status: ::std::option::Option<crate::types::IntelligentTieringStatus>,
    pub(crate) tierings: ::std::option::Option<::std::vec::Vec<crate::types::Tiering>>,
}
impl IntelligentTieringConfigurationBuilder {
    /// <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
    /// This field is required.
    pub fn id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.id = ::std::option::Option::Some(input.into());
        self
    }
    /// <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
    pub fn set_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.id = input;
        self
    }
    /// <p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>
    pub fn get_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.id
    }
    /// <p>Specifies a bucket filter. The configuration only includes objects that meet the filter's criteria.</p>
    pub fn filter(mut self, input: crate::types::IntelligentTieringFilter) -> Self {
        self.filter = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies a bucket filter. The configuration only includes objects that meet the filter's criteria.</p>
    pub fn set_filter(mut self, input: ::std::option::Option<crate::types::IntelligentTieringFilter>) -> Self {
        self.filter = input;
        self
    }
    /// <p>Specifies a bucket filter. The configuration only includes objects that meet the filter's criteria.</p>
    pub fn get_filter(&self) -> &::std::option::Option<crate::types::IntelligentTieringFilter> {
        &self.filter
    }
    /// <p>Specifies the status of the configuration.</p>
    /// This field is required.
    pub fn status(mut self, input: crate::types::IntelligentTieringStatus) -> Self {
        self.status = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies the status of the configuration.</p>
    pub fn set_status(mut self, input: ::std::option::Option<crate::types::IntelligentTieringStatus>) -> Self {
        self.status = input;
        self
    }
    /// <p>Specifies the status of the configuration.</p>
    pub fn get_status(&self) -> &::std::option::Option<crate::types::IntelligentTieringStatus> {
        &self.status
    }
    /// Appends an item to `tierings`.
    ///
    /// To override the contents of this collection use [`set_tierings`](Self::set_tierings).
    ///
    /// <p>Specifies the S3 Intelligent-Tiering storage class tier of the configuration.</p>
    pub fn tierings(mut self, input: crate::types::Tiering) -> Self {
        let mut v = self.tierings.unwrap_or_default();
        v.push(input);
        self.tierings = ::std::option::Option::Some(v);
        self
    }
    /// <p>Specifies the S3 Intelligent-Tiering storage class tier of the configuration.</p>
    pub fn set_tierings(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::Tiering>>) -> Self {
        self.tierings = input;
        self
    }
    /// <p>Specifies the S3 Intelligent-Tiering storage class tier of the configuration.</p>
    pub fn get_tierings(&self) -> &::std::option::Option<::std::vec::Vec<crate::types::Tiering>> {
        &self.tierings
    }
    /// Consumes the builder and constructs a [`IntelligentTieringConfiguration`](crate::types::IntelligentTieringConfiguration).
    /// This method will fail if any of the following fields are not set:
    /// - [`id`](crate::types::builders::IntelligentTieringConfigurationBuilder::id)
    /// - [`status`](crate::types::builders::IntelligentTieringConfigurationBuilder::status)
    /// - [`tierings`](crate::types::builders::IntelligentTieringConfigurationBuilder::tierings)
    pub fn build(self) -> ::std::result::Result<crate::types::IntelligentTieringConfiguration, ::aws_smithy_types::error::operation::BuildError> {
        ::std::result::Result::Ok(crate::types::IntelligentTieringConfiguration {
            id: self.id.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "id",
                    "id was not specified but it is required when building IntelligentTieringConfiguration",
                )
            })?,
            filter: self.filter,
            status: self.status.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "status",
                    "status was not specified but it is required when building IntelligentTieringConfiguration",
                )
            })?,
            tierings: self.tierings.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "tierings",
                    "tierings was not specified but it is required when building IntelligentTieringConfiguration",
                )
            })?,
        })
    }
}