You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: _cluster.rs
    path of file: ./repos/aws-sdk-rust/sdk/docdbelastic/src/types
    
    the code of the file until where you have to start completion: // Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.

/// <p>Returns information about a specific elastic cluster.</p>
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct Cluster {
    /// <p>The name of the elastic cluster.</p>
    pub cluster_name: ::std::string::String,
    /// <p>The ARN identifier of the elastic cluster.</p>
    pub cluster_arn: ::std::string::String,
    /// <p>The status of the elastic cluster.</p>
    pub status: crate::types::Status,
    /// <p>The URL used to connect to the elastic cluster.</p>
    pub cluster_endpoint: ::std::string::String,
    /// <p>The time when the elastic cluster was created in Universal Coordinated Time (UTC).</p>
    pub create_time: ::std::string::String,
    /// <p>The name of the elastic cluster administrator.</p>
    pub admin_user_name: ::std::string::String,
    /// <p>The authentication type for the elastic cluster.</p>
    pub auth_type: crate::types::Auth,
    /// <p>The number of vCPUs assigned to each elastic cluster shard. Maximum is 64. Allowed values are 2, 4, 8, 16, 32, 64.</p>
    pub shard_capacity: i32,
    /// <p>The number of shards assigned to the elastic cluster. Maximum is 32.</p>
    pub shard_count: i32,
    /// <p>A list of EC2 VPC security groups associated with thie elastic cluster.</p>
    pub vpc_security_group_ids: ::std::vec::Vec<::std::string::String>,
    /// <p>The Amazon EC2 subnet IDs for the elastic cluster.</p>
    pub subnet_ids: ::std::vec::Vec<::std::string::String>,
    /// <p>The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).</p>
    /// <p><i>Format</i>: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
    pub preferred_maintenance_window: ::std::string::String,
    /// <p>The KMS key identifier to use to encrypt the elastic cluster.</p>
    pub kms_key_id: ::std::string::String,
    /// <p>The total number of shards in the cluster.</p>
    pub shards: ::std::option::Option<::std::vec::Vec<crate::types::Shard>>,
    /// <p>The number of days for which automatic snapshots are retained.</p>
    pub backup_retention_period: ::std::option::Option<i32>,
    /// <p>The daily time range during which automated backups are created if automated backups are enabled, as determined by <code>backupRetentionPeriod</code>.</p>
    pub preferred_backup_window: ::std::option::Option<::std::string::String>,
    /// <p>The number of replica instances applying to all shards in the cluster. A <code>shardInstanceCount</code> value of 1 means there is one writer instance, and any additional instances are replicas that can be used for reads and to improve availability.</p>
    pub shard_instance_count: ::std::option::Option<i32>,
}
impl Cluster {
    /// <p>The name of the elastic cluster.</p>
    pub fn cluster_name(&self) -> &str {
        use std::ops::Deref;
        self.cluster_name.deref()
    }
    /// <p>The ARN identifier of the elastic cluster.</p>
    pub fn cluster_arn(&self) -> &str {
        use std::ops::Deref;
        self.cluster_arn.deref()
    }
    /// <p>The status of the elastic cluster.</p>
    pub fn status(&self) -> &crate::types::Status {
        &self.status
    }
    /// <p>The URL used to connect to the elastic cluster.</p>
    pub fn cluster_endpoint(&self) -> &str {
        use std::ops::Deref;
        self.cluster_endpoint.deref()
    }
    /// <p>The time when the elastic cluster was created in Universal Coordinated Time (UTC).</p>
    pub fn create_time(&self) -> &str {
        use std::ops::Deref;
        self.create_time.deref()
    }
    /// <p>The name of the elastic cluster administrator.</p>
    pub fn admin_user_name(&self) -> &str {
        use std::ops::Deref;
        self.admin_user_name.deref()
    }
    /// <p>The authentication type for the elastic cluster.</p>
    pub fn auth_type(&self) -> &crate::types::Auth {
        &self.auth_type
    }
    /// <p>The number of vCPUs assigned to each elastic cluster shard. Maximum is 64. Allowed values are 2, 4, 8, 16, 32, 64.</p>
    pub fn shard_capacity(&self) -> i32 {
        self.shard_capacity
    }
    /// <p>The number of shards assigned to the elastic cluster. Maximum 
    
    pub fn build(self) -> ::std::result::Result<crate::types::Cluster, ::aws_smithy_types::error::operation::BuildError> {
        ::std::result::Result::Ok(crate::types::Cluster {
            cluster_name: self.cluster_name.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "cluster_name",
                    "cluster_name was not specified but it is required when building Cluster",
                )
            })?,
            cluster_arn: self.cluster_arn.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "cluster_arn",
                    "cluster_arn was not specified but it is required when building Cluster",
                )
            })?,
            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 Cluster",
                )
            })?,
            cluster_endpoint: self.cluster_endpoint.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "cluster_endpoint",
                    "cluster_endpoint was not specified but it is required when building Cluster",
                )
            })?,
            create_time: self.create_time.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "create_time",
                    "create_time was not specified but it is required when building Cluster",
                )
            })?,
            admin_user_name: self.admin_user_name.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "admin_user_name",
                    "admin_user_name was not specified but it is required when building Cluster",
                )
            })?,
            auth_type: self.auth_type.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "auth_type",
                    "auth_type was not specified but it is required when building Cluster",
                )
            })?,
            shard_capacity: self.shard_capacity.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "shard_capacity",
                    "shard_capacity was not specified but it is required when building Cluster",
                )
            })?,
            shard_count: self.shard_count.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "shard_count",
                    "shard_count was not specified but it is required when building Cluster",
                )
            })?,
            vpc_security_group_ids: self.vpc_security_group_ids.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "vpc_security_group_ids",
                    "vpc_security_group_ids was not specified but it is required when building Cluster",
                )
            })?,
            subnet_ids: self.subnet_ids.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "subnet_ids",
                    "subnet_ids was not specified but it is required when building Cluster",
                )
            })?,
            preferred_maintenance_window: self.preferred_maintenance_window.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "preferred_maintenance_window",
                    "preferred_maintenance_window was not specified but it is required when building Cluster",
                )
            })?,
            kms_key_id: self.kms_key_id.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "kms_key_id",
                    "kms_key_id was not specified but it is required when building Cluster",
                )
            })?,
            shards: self.shards,
            backup_retention_period: self.backup_retention_period,
            preferred_backup_window: self.preferred_backup_window,
            shard_instance_count: self.shard_instance_count,
        })
    }