#[allow(missing_docs)] #[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct DescribeDomainOutput {
    pub domain_arn: ::std::option::Option<::std::string::String>,
    pub domain_id: ::std::option::Option<::std::string::String>,
    pub domain_name: ::std::option::Option<::std::string::String>,
    pub home_efs_file_system_id: ::std::option::Option<::std::string::String>,
    pub single_sign_on_managed_application_instance_id: ::std::option::Option<::std::string::String>,
    pub single_sign_on_application_arn: ::std::option::Option<::std::string::String>,
    pub status: ::std::option::Option<crate::types::DomainStatus>,
    pub creation_time: ::std::option::Option<::aws_smithy_types::DateTime>,
    pub last_modified_time: ::std::option::Option<::aws_smithy_types::DateTime>,
    pub failure_reason: ::std::option::Option<::std::string::String>,
    pub auth_mode: ::std::option::Option<crate::types::AuthMode>,
    pub default_user_settings: ::std::option::Option<crate::types::UserSettings>,
    pub app_network_access_type: ::std::option::Option<crate::types::AppNetworkAccessType>,
    #[deprecated(note = "This property is deprecated, use KmsKeyId instead.")]
    pub home_efs_file_system_kms_key_id: ::std::option::Option<::std::string::String>,
    pub subnet_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
    pub url: ::std::option::Option<::std::string::String>,
    pub vpc_id: ::std::option::Option<::std::string::String>,
    pub kms_key_id: ::std::option::Option<::std::string::String>,
    pub domain_settings: ::std::option::Option<crate::types::DomainSettings>,
    pub app_security_group_management: ::std::option::Option<crate::types::AppSecurityGroupManagement>,
    pub security_group_id_for_domain_boundary: ::std::option::Option<::std::string::String>,
    pub default_space_settings: ::std::option::Option<crate::types::DefaultSpaceSettings>,
    _request_id: Option<String>,
}
impl DescribeDomainOutput {
    pub fn domain_arn(&self) -> ::std::option::Option<&str> {
        self.domain_arn.as_deref()
    }
    pub fn domain_id(&self) -> ::std::option::Option<&str> {
        self.domain_id.as_deref()
    }
    pub fn domain_name(&self) -> ::std::option::Option<&str> {
        self.domain_name.as_deref()
    }
    pub fn home_efs_file_system_id(&self) -> ::std::option::Option<&str> {
        self.home_efs_file_system_id.as_deref()
    }
    pub fn single_sign_on_managed_application_instance_id(&self) -> ::std::option::Option<&str> {
        self.single_sign_on_managed_application_instance_id.as_deref()
    }
    pub fn single_sign_on_application_arn(&self) -> ::std::option::Option<&str> {
        self.single_sign_on_application_arn.as_deref()
    }
    pub fn status(&self) -> ::std::option::Option<&crate::types::DomainStatus> {
        self.status.as_ref()
    }
    pub fn creation_time(&self) -> ::std::option::Option<&::aws_smithy_types::DateTime> {
        self.creation_time.as_ref()
    }
    pub fn last_modified_time(&self) -> ::std::option::Option<&::aws_smithy_types::DateTime> {
        self.last_modified_time.as_ref()
    }
    pub fn failure_reason(&self) -> ::std::option::Option<&str> {
        self.failure_reason.as_deref()
    }
    pub fn auth_mode(&self) -> ::std::option::Option<&crate::types::AuthMode> {
        self.auth_mode.as_ref()
    }
    pub fn default_user_settings(&self) -> ::std::option::Option<&crate::types::UserSettings> {
        self.default_user_settings.as_ref()
    }
    pub fn app_network_access_type(&self) -> ::std::option::Option<&crate::types::AppNetworkAccessType> {
        self.app_network_access_type.as_ref()
    }
    #[deprecated(note = "This property is deprecated, use KmsKeyId instead.")]
    pub fn home_efs_file_system_kms_key_id(&self) -> ::std::option::Option<&str> {
        self.home_efs_file_system_kms_key_id.as_deref()
    }
    pub fn subnet_ids(&self) -> &[::std::string::String] {
        self.subnet_ids.as_deref().unwrap_or_default()
    }
    pub fn url(&self) -> ::std::option::Option<&str> {
        self.url.as_deref()
    }
    pub fn vpc_id(&self) -> ::std::option::Option<&str> {
        self.vpc_id.as_deref()
    }
    pub fn kms_key_id(&self) -> ::std::option::Option<&str> {
        self.kms_key_id.as_deref()
    }
    pub fn domain_settings(&self) -> ::std::option::Option<&crate::types::DomainSettings> {
        self.domain_settings.as_ref()
    }
    pub fn app_security_group_management(&self) -> ::std::option::Option<&crate::types::AppSecurityGroupManagement> {
        self.app_security_group_management.as_ref()
    }
    pub fn security_group_id_for_domain_boundary(&self) -> ::std::option::Option<&str> {
        self.security_group_id_for_domain_boundary.as_deref()
    }
    pub fn default_space_settings(&self) -> ::std::option::Option<&crate::types::DefaultSpaceSettings> {
        self.default_space_settings.as_ref()
    }
}
impl ::aws_types::request_id::RequestId for DescribeDomainOutput {
    fn request_id(&self) -> Option<&str> {
        self._request_id.as_deref()
    }
}
impl DescribeDomainOutput {
    pub fn builder() -> crate::operation::describe_domain::builders::DescribeDomainOutputBuilder {
        crate::operation::describe_domain::builders::DescribeDomainOutputBuilder::default()
    }
}
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
pub struct DescribeDomainOutputBuilder {
    pub(crate) domain_arn: ::std::option::Option<::std::string::String>,
    pub(crate) domain_id: ::std::option::Option<::std::string::String>,
    pub(crate) domain_name: ::std::option::Option<::std::string::String>,
    pub(crate) home_efs_file_system_id: ::std::option::Option<::std::string::String>,
    pub(crate) single_sign_on_managed_application_instance_id: ::std::option::Option<::std::string::String>,
    pub(crate) single_sign_on_application_arn: ::std::option::Option<::std::string::String>,
    pub(crate) status: ::std::option::Option<crate::types::DomainStatus>,
    pub(crate) creation_time: ::std::option::Option<::aws_smithy_types::DateTime>,
    pub(crate) last_modified_time: ::std::option::Option<::aws_smithy_types::DateTime>,
    pub(crate) failure_reason: ::std::option::Option<::std::string::String>,
    pub(crate) auth_mode: ::std::option::Option<crate::types::AuthMode>,
    pub(crate) default_user_settings: ::std::option::Option<crate::types::UserSettings>,
    pub(crate) app_network_access_type: ::std::option::Option<crate::types::AppNetworkAccessType>,
    pub(crate) home_efs_file_system_kms_key_id: ::std::option::Option<::std::string::String>,
    pub(crate) subnet_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
    pub(crate) url: ::std::option::Option<::std::string::String>,
    pub(crate) vpc_id: ::std::option::Option<::std::string::String>,
    pub(crate) kms_key_id: ::std::option::Option<::std::string::String>,
    pub(crate) domain_settings: ::std::option::Option<crate::types::DomainSettings>,
    pub(crate) app_security_group_management: ::std::option::Option<crate::types::AppSecurityGroupManagement>,
    pub(crate) security_group_id_for_domain_boundary: ::std::option::Option<::std::string::String>,
    pub(crate) default_space_settings: ::std::option::Option<crate::types::DefaultSpaceSettings>,
    _request_id: Option<String>,
}
impl DescribeDomainOutputBuilder {
    pub fn domain_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.domain_arn = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_domain_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.domain_arn = input;
        self
    }
    pub fn get_domain_arn(&self) -> &::std::option::Option<::std::string::String> {
        &self.domain_arn
    }
    pub fn domain_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.domain_id = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_domain_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.domain_id = input;
        self
    }
    pub fn get_domain_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.domain_id
    }
    pub fn domain_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.domain_name = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_domain_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.domain_name = input;
        self
    }
    pub fn get_domain_name(&self) -> &::std::option::Option<::std::string::String> {
        &self.domain_name
    }
    pub fn home_efs_file_system_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.home_efs_file_system_id = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_home_efs_file_system_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.home_efs_file_system_id = input;
        self
    }
    pub fn get_home_efs_file_system_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.home_efs_file_system_id
    }
    pub fn single_sign_on_managed_application_instance_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.single_sign_on_managed_application_instance_id = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_single_sign_on_managed_application_instance_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.single_sign_on_managed_application_instance_id = input;
        self
    }
    pub fn get_single_sign_on_managed_application_instance_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.single_sign_on_managed_application_instance_id
    }
    pub fn single_sign_on_application_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.single_sign_on_application_arn = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_single_sign_on_application_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.single_sign_on_application_arn = input;
        self
    }
    pub fn get_single_sign_on_application_arn(&self) -> &::std::option::Option<::std::string::String> {
        &self.single_sign_on_application_arn
    }
    pub fn status(mut self, input: crate::types::DomainStatus) -> Self {
        self.status = ::std::option::Option::Some(input);
        self
    }
    pub fn set_status(mut self, input: ::std::option::Option<crate::types::DomainStatus>) -> Self {
        self.status = input;
        self
    }
    pub fn get_status(&self) -> &::std::option::Option<crate::types::DomainStatus> {
        &self.status
    }
    pub fn creation_time(mut self, input: ::aws_smithy_types::DateTime) -> Self {
        self.creation_time = ::std::option::Option::Some(input);
        self
    }
    pub fn set_creation_time(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
        self.creation_time = input;
        self
    }
    pub fn get_creation_time(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
        &self.creation_time
    }
    pub fn last_modified_time(mut self, input: ::aws_smithy_types::DateTime) -> Self {
        self.last_modified_time = ::std::option::Option::Some(input);
        self
    }
    pub fn set_last_modified_time(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
        self.last_modified_time = input;
        self
    }
    pub fn get_last_modified_time(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
        &self.last_modified_time
    }
    pub fn failure_reason(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.failure_reason = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_failure_reason(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.failure_reason = input;
        self
    }
    pub fn get_failure_reason(&self) -> &::std::option::Option<::std::string::String> {
        &self.failure_reason
    }
    pub fn auth_mode(mut self, input: crate::types::AuthMode) -> Self {
        self.auth_mode = ::std::option::Option::Some(input);
        self
    }
    pub fn set_auth_mode(mut self, input: ::std::option::Option<crate::types::AuthMode>) -> Self {
        self.auth_mode = input;
        self
    }
    pub fn get_auth_mode(&self) -> &::std::option::Option<crate::types::AuthMode> {
        &self.auth_mode
    }
    pub fn default_user_settings(mut self, input: crate::types::UserSettings) -> Self {
        self.default_user_settings = ::std::option::Option::Some(input);
        self
    }
    pub fn set_default_user_settings(mut self, input: ::std::option::Option<crate::types::UserSettings>) -> Self {
        self.default_user_settings = input;
        self
    }
    pub fn get_default_user_settings(&self) -> &::std::option::Option<crate::types::UserSettings> {
        &self.default_user_settings
    }
    pub fn app_network_access_type(mut self, input: crate::types::AppNetworkAccessType) -> Self {
        self.app_network_access_type = ::std::option::Option::Some(input);
        self
    }
    pub fn set_app_network_access_type(mut self, input: ::std::option::Option<crate::types::AppNetworkAccessType>) -> Self {
        self.app_network_access_type = input;
        self
    }
    pub fn get_app_network_access_type(&self) -> &::std::option::Option<crate::types::AppNetworkAccessType> {
        &self.app_network_access_type
    }
    #[deprecated(note = "This property is deprecated, use KmsKeyId instead.")]
    pub fn home_efs_file_system_kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.home_efs_file_system_kms_key_id = ::std::option::Option::Some(input.into());
        self
    }
    #[deprecated(note = "This property is deprecated, use KmsKeyId instead.")]
    pub fn set_home_efs_file_system_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.home_efs_file_system_kms_key_id = input;
        self
    }
    #[deprecated(note = "This property is deprecated, use KmsKeyId instead.")]
    pub fn get_home_efs_file_system_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.home_efs_file_system_kms_key_id
    }
    pub fn subnet_ids(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        let mut v = self.subnet_ids.unwrap_or_default();
        v.push(input.into());
        self.subnet_ids = ::std::option::Option::Some(v);
        self
    }
    pub fn set_subnet_ids(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
        self.subnet_ids = input;
        self
    }
    pub fn get_subnet_ids(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
        &self.subnet_ids
    }
    pub fn url(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.url = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_url(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.url = input;
        self
    }
    pub fn get_url(&self) -> &::std::option::Option<::std::string::String> {
        &self.url
    }
    pub fn vpc_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.vpc_id = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_vpc_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.vpc_id = input;
        self
    }
    pub fn get_vpc_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.vpc_id
    }
    pub fn kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.kms_key_id = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.kms_key_id = input;
        self
    }
    pub fn get_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
        &self.kms_key_id
    }
    pub fn domain_settings(mut self, input: crate::types::DomainSettings) -> Self {
        self.domain_settings = ::std::option::Option::Some(input);
        self
    }
    pub fn set_domain_settings(mut self, input: ::std::option::Option<crate::types::DomainSettings>) -> Self {
        self.domain_settings = input;
        self
    }
    pub fn get_domain_settings(&self) -> &::std::option::Option<crate::types::DomainSettings> {
        &self.domain_settings
    }
    pub fn app_security_group_management(mut self, input: crate::types::AppSecurityGroupManagement) -> Self {
        self.app_security_group_management = ::std::option::Option::Some(input);
        self
    }
    pub fn set_app_security_group_management(mut self, input: ::std::option::Option<crate::types::AppSecurityGroupManagement>) -> Self {
        self.app_security_group_management = input;
        self
    }
    pub fn get_app_security_group_management(&self) -> &::std::option::Option<crate::types::AppSecurityGroupManagement> {
        &self.app_security_group_management
    }
    pub fn security_group_id_for_domain_boundary(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.security_group_id_for_domain_boundary = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_security_group_id_for_domain_boundary(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.security_group_id_for_domain_boundary = input;
        self
    }
    pub fn get_security_group_id_for_domain_boundary(&self) -> &::std::option::Option<::std::string::String> {
        &self.security_group_id_for_domain_boundary
    }
    pub fn default_space_settings(mut self, input: crate::types::DefaultSpaceSettings) -> Self {
        self.default_space_settings = ::std::option::Option::Some(input);
        self
    }
    pub fn set_default_space_settings(mut self, input: ::std::option::Option<crate::types::DefaultSpaceSettings>) -> Self {
        self.default_space_settings = input;
        self
    }
    pub fn get_default_space_settings(&self) -> &::std::option::Option<crate::types::DefaultSpaceSettings> {
        &self.default_space_settings
    }
    pub(crate) fn _request_id(mut self, request_id: impl Into<String>) -> Self {
        self._request_id = Some(request_id.into());
        self
    }
    pub(crate) fn _set_request_id(&mut self, request_id: Option<String>) -> &mut Self {
        self._request_id = request_id;
        self
    }
    pub fn build(self) -> crate::operation::describe_domain::DescribeDomainOutput {
        crate::operation::describe_domain::DescribeDomainOutput {
            domain_arn: self.domain_arn,
            domain_id: self.domain_id,
            domain_name: self.domain_name,
            home_efs_file_system_id: self.home_efs_file_system_id,
            single_sign_on_managed_application_instance_id: self.single_sign_on_managed_application_instance_id,
            single_sign_on_application_arn: self.single_sign_on_application_arn,
            status: self.status,
            creation_time: self.creation_time,
            last_modified_time: self.last_modified_time,
            failure_reason: self.failure_reason,
            auth_mode: self.auth_mode,
            default_user_settings: self.default_user_settings,
            app_network_access_type: self.app_network_access_type,
            home_efs_file_system_kms_key_id: self.home_efs_file_system_kms_key_id,
            subnet_ids: self.subnet_ids,
            url: self.url,
            vpc_id: self.vpc_id,
            kms_key_id: self.kms_key_id,
            domain_settings: self.domain_settings,
            app_security_group_management: self.app_security_group_management,
            security_group_id_for_domain_boundary: self.security_group_id_for_domain_boundary,
            default_space_settings: self.default_space_settings,
            _request_id: self._request_id,
        }
    }
}