#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct RegistrationFieldDefinition {
    pub section_path: ::std::string::String,
    pub field_path: ::std::string::String,
    pub field_type: crate::types::FieldType,
    pub field_requirement: crate::types::FieldRequirement,
    pub select_validation: ::std::option::Option<crate::types::SelectValidation>,
    pub text_validation: ::std::option::Option<crate::types::TextValidation>,
    pub display_hints: ::std::option::Option<crate::types::RegistrationFieldDisplayHints>,
}
impl RegistrationFieldDefinition {
    pub fn section_path(&self) -> &str {
        use std::ops::Deref;
        self.section_path.deref()
    }
    pub fn field_path(&self) -> &str {
        use std::ops::Deref;
        self.field_path.deref()
    }
    pub fn field_type(&self) -> &crate::types::FieldType {
        &self.field_type
    }
    pub fn field_requirement(&self) -> &crate::types::FieldRequirement {
        &self.field_requirement
    }
    pub fn select_validation(&self) -> ::std::option::Option<&crate::types::SelectValidation> {
        self.select_validation.as_ref()
    }
    pub fn text_validation(&self) -> ::std::option::Option<&crate::types::TextValidation> {
        self.text_validation.as_ref()
    }
    pub fn display_hints(&self) -> ::std::option::Option<&crate::types::RegistrationFieldDisplayHints> {
        self.display_hints.as_ref()
    }
}
impl RegistrationFieldDefinition {
    pub fn builder() -> crate::types::builders::RegistrationFieldDefinitionBuilder {
        crate::types::builders::RegistrationFieldDefinitionBuilder::default()
    }
}
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
pub struct RegistrationFieldDefinitionBuilder {
    pub(crate) section_path: ::std::option::Option<::std::string::String>,
    pub(crate) field_path: ::std::option::Option<::std::string::String>,
    pub(crate) field_type: ::std::option::Option<crate::types::FieldType>,
    pub(crate) field_requirement: ::std::option::Option<crate::types::FieldRequirement>,
    pub(crate) select_validation: ::std::option::Option<crate::types::SelectValidation>,
    pub(crate) text_validation: ::std::option::Option<crate::types::TextValidation>,
    pub(crate) display_hints: ::std::option::Option<crate::types::RegistrationFieldDisplayHints>,
}
impl RegistrationFieldDefinitionBuilder {
    pub fn section_path(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.section_path = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_section_path(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.section_path = input;
        self
    }
    pub fn get_section_path(&self) -> &::std::option::Option<::std::string::String> {
        &self.section_path
    }
    pub fn field_path(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.field_path = ::std::option::Option::Some(input.into());
        self
    }
    pub fn set_field_path(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.field_path = input;
        self
    }
    pub fn get_field_path(&self) -> &::std::option::Option<::std::string::String> {
        &self.field_path
    }
    pub fn field_type(mut self, input: crate::types::FieldType) -> Self {
        self.field_type = ::std::option::Option::Some(input);
        self
    }
    pub fn set_field_type(mut self, input: ::std::option::Option<crate::types::FieldType>) -> Self {
        self.field_type = input;
        self
    }
    pub fn get_field_type(&self) -> &::std::option::Option<crate::types::FieldType> {
        &self.field_type
    }
    pub fn field_requirement(mut self, input: crate::types::FieldRequirement) -> Self {
        self.field_requirement = ::std::option::Option::Some(input);
        self
    }
    pub fn set_field_requirement(mut self, input: ::std::option::Option<crate::types::FieldRequirement>) -> Self {
        self.field_requirement = input;
        self
    }
    pub fn get_field_requirement(&self) -> &::std::option::Option<crate::types::FieldRequirement> {
        &self.field_requirement
    }
    pub fn select_validation(mut self, input: crate::types::SelectValidation) -> Self {
        self.select_validation = ::std::option::Option::Some(input);
        self
    }
    pub fn set_select_validation(mut self, input: ::std::option::Option<crate::types::SelectValidation>) -> Self {
        self.select_validation = input;
        self
    }
    pub fn get_select_validation(&self) -> &::std::option::Option<crate::types::SelectValidation> {
        &self.select_validation
    }
    pub fn text_validation(mut self, input: crate::types::TextValidation) -> Self {
        self.text_validation = ::std::option::Option::Some(input);
        self
    }
    pub fn set_text_validation(mut self, input: ::std::option::Option<crate::types::TextValidation>) -> Self {
        self.text_validation = input;
        self
    }
    pub fn get_text_validation(&self) -> &::std::option::Option<crate::types::TextValidation> {
        &self.text_validation
    }
    pub fn display_hints(mut self, input: crate::types::RegistrationFieldDisplayHints) -> Self {
        self.display_hints = ::std::option::Option::Some(input);
        self
    }
    pub fn set_display_hints(mut self, input: ::std::option::Option<crate::types::RegistrationFieldDisplayHints>) -> Self {
        self.display_hints = input;
        self
    }
    pub fn get_display_hints(&self) -> &::std::option::Option<crate::types::RegistrationFieldDisplayHints> {
        &self.display_hints
    }
    pub fn build(self) -> ::std::result::Result<crate::types::RegistrationFieldDefinition, ::aws_smithy_types::error::operation::BuildError> {
        ::std::result::Result::Ok(crate::types::RegistrationFieldDefinition {
            section_path: self.section_path.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "section_path",
                    "section_path was not specified but it is required when building RegistrationFieldDefinition",
                )
            })?,
            field_path: self.field_path.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "field_path",
                    "field_path was not specified but it is required when building RegistrationFieldDefinition",
                )
            })?,
            field_type: self.field_type.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "field_type",
                    "field_type was not specified but it is required when building RegistrationFieldDefinition",
                )
            })?,
            field_requirement: self.field_requirement.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "field_requirement",
                    "field_requirement was not specified but it is required when building RegistrationFieldDefinition",
                )
            })?,
            select_validation: self.select_validation,
            text_validation: self.text_validation,
            display_hints: self.display_hints,
        })
    }
}