azure_mgmt_security 0.9.0

generated REST API bindings
Documentation
#![allow(non_camel_case_types)]
#![allow(unused_imports)]
use serde::de::{value, Deserializer, IntoDeserializer};
use serde::{Deserialize, Serialize, Serializer};
use std::str::FromStr;
#[doc = "The aws connector environment data"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AwsEnvironmentData {
    #[serde(flatten)]
    pub environment_data: EnvironmentData,
    #[doc = "The awsOrganization data "]
    #[serde(rename = "organizationalData", default, skip_serializing_if = "Option::is_none")]
    pub organizational_data: Option<AwsOrganizationalData>,
}
impl AwsEnvironmentData {
    pub fn new(environment_data: EnvironmentData) -> Self {
        Self {
            environment_data,
            organizational_data: None,
        }
    }
}
#[doc = "The awsOrganization data "]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AwsOrganizationalData {
    #[doc = "The multi cloud account's membership type in the organization"]
    #[serde(rename = "organizationMembershipType")]
    pub organization_membership_type: aws_organizational_data::OrganizationMembershipType,
}
impl AwsOrganizationalData {
    pub fn new(organization_membership_type: aws_organizational_data::OrganizationMembershipType) -> Self {
        Self {
            organization_membership_type,
        }
    }
}
pub mod aws_organizational_data {
    use super::*;
    #[doc = "The multi cloud account's membership type in the organization"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "OrganizationMembershipType")]
    pub enum OrganizationMembershipType {
        Member,
        Organization,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for OrganizationMembershipType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for OrganizationMembershipType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for OrganizationMembershipType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::Member => serializer.serialize_unit_variant("OrganizationMembershipType", 0u32, "Member"),
                Self::Organization => serializer.serialize_unit_variant("OrganizationMembershipType", 1u32, "Organization"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}
#[doc = "The awsOrganization data for the master account"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AwsOrganizationalDataMaster {
    #[serde(flatten)]
    pub aws_organizational_data: AwsOrganizationalData,
    #[doc = "If the multi cloud account is of membership type organization, this will be the name of the onboarding stackset"]
    #[serde(rename = "stacksetName", default, skip_serializing_if = "Option::is_none")]
    pub stackset_name: Option<String>,
    #[doc = "If the multi cloud account is of membership type organization, list of accounts excluded from offering"]
    #[serde(
        rename = "excludedAccountIds",
        default,
        deserialize_with = "azure_core::util::deserialize_null_as_default",
        skip_serializing_if = "Vec::is_empty"
    )]
    pub excluded_account_ids: Vec<String>,
}
impl AwsOrganizationalDataMaster {
    pub fn new(aws_organizational_data: AwsOrganizationalData) -> Self {
        Self {
            aws_organizational_data,
            stackset_name: None,
            excluded_account_ids: Vec::new(),
        }
    }
}
#[doc = "The awsOrganization data for the member account"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AwsOrganizationalDataMember {
    #[serde(flatten)]
    pub aws_organizational_data: AwsOrganizationalData,
    #[doc = "If the multi cloud account is not of membership type organization, this will be the ID of the account's parent"]
    #[serde(rename = "parentHierarchyId", default, skip_serializing_if = "Option::is_none")]
    pub parent_hierarchy_id: Option<String>,
}
impl AwsOrganizationalDataMember {
    pub fn new(aws_organizational_data: AwsOrganizationalData) -> Self {
        Self {
            aws_organizational_data,
            parent_hierarchy_id: None,
        }
    }
}
#[doc = "The AzureDevOps scope connector's environment data"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AzureDevOpsScopeEnvironmentData {
    #[serde(flatten)]
    pub environment_data: EnvironmentData,
}
impl AzureDevOpsScopeEnvironmentData {
    pub fn new(environment_data: EnvironmentData) -> Self {
        Self { environment_data }
    }
}
#[doc = "Describes an Azure resource with location"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct AzureTrackedResourceLocation {
    #[doc = "Location where the resource is stored"]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location: Option<String>,
}
impl AzureTrackedResourceLocation {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.)."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct CloudError {
    #[doc = "The error detail."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub error: Option<CloudErrorBody>,
}
impl azure_core::Continuable for CloudError {
    type Continuation = String;
    fn continuation(&self) -> Option<Self::Continuation> {
        None
    }
}
impl CloudError {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The error detail."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct CloudErrorBody {
    #[doc = "The error code."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code: Option<String>,
    #[doc = "The error message."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    #[doc = "The error target."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target: Option<String>,
    #[doc = "The error details."]
    #[serde(
        default,
        deserialize_with = "azure_core::util::deserialize_null_as_default",
        skip_serializing_if = "Vec::is_empty"
    )]
    pub details: Vec<CloudErrorBody>,
    #[doc = "The error additional info."]
    #[serde(
        rename = "additionalInfo",
        default,
        deserialize_with = "azure_core::util::deserialize_null_as_default",
        skip_serializing_if = "Vec::is_empty"
    )]
    pub additional_info: Vec<ErrorAdditionalInfo>,
}
impl CloudErrorBody {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "Entity tag is used for comparing two or more entities from the same requested resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct ETag {
    #[doc = "Entity tag is used for comparing two or more entities from the same requested resource."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub etag: Option<String>,
}
impl ETag {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The security connector environment data."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct EnvironmentData {
    #[doc = "The type of the environment data."]
    #[serde(rename = "environmentType")]
    pub environment_type: environment_data::EnvironmentType,
}
impl EnvironmentData {
    pub fn new(environment_type: environment_data::EnvironmentType) -> Self {
        Self { environment_type }
    }
}
pub mod environment_data {
    use super::*;
    #[doc = "The type of the environment data."]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "EnvironmentType")]
    pub enum EnvironmentType {
        AwsAccount,
        GcpProject,
        GithubScope,
        AzureDevOpsScope,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for EnvironmentType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for EnvironmentType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for EnvironmentType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::AwsAccount => serializer.serialize_unit_variant("EnvironmentType", 0u32, "AwsAccount"),
                Self::GcpProject => serializer.serialize_unit_variant("EnvironmentType", 1u32, "GcpProject"),
                Self::GithubScope => serializer.serialize_unit_variant("EnvironmentType", 2u32, "GithubScope"),
                Self::AzureDevOpsScope => serializer.serialize_unit_variant("EnvironmentType", 3u32, "AzureDevOpsScope"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}
#[doc = "The resource management error additional info."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct ErrorAdditionalInfo {
    #[doc = "The additional info type."]
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    #[doc = "The additional info."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub info: Option<serde_json::Value>,
}
impl ErrorAdditionalInfo {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The gcpOrganization data"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct GcpOrganizationalData {
    #[doc = "The multi cloud account's membership type in the organization"]
    #[serde(rename = "organizationMembershipType")]
    pub organization_membership_type: gcp_organizational_data::OrganizationMembershipType,
}
impl GcpOrganizationalData {
    pub fn new(organization_membership_type: gcp_organizational_data::OrganizationMembershipType) -> Self {
        Self {
            organization_membership_type,
        }
    }
}
pub mod gcp_organizational_data {
    use super::*;
    #[doc = "The multi cloud account's membership type in the organization"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "OrganizationMembershipType")]
    pub enum OrganizationMembershipType {
        Member,
        Organization,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for OrganizationMembershipType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for OrganizationMembershipType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for OrganizationMembershipType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::Member => serializer.serialize_unit_variant("OrganizationMembershipType", 0u32, "Member"),
                Self::Organization => serializer.serialize_unit_variant("OrganizationMembershipType", 1u32, "Organization"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}
#[doc = "The gcpOrganization data for the member account"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct GcpOrganizationalDataMember {
    #[serde(flatten)]
    pub gcp_organizational_data: GcpOrganizationalData,
    #[doc = "If the multi cloud account is not of membership type organization, this will be the ID of the project's parent"]
    #[serde(rename = "parentHierarchyId", default, skip_serializing_if = "Option::is_none")]
    pub parent_hierarchy_id: Option<String>,
    #[doc = "The GCP management project number from organizational onboarding"]
    #[serde(rename = "managementProjectNumber", default, skip_serializing_if = "Option::is_none")]
    pub management_project_number: Option<String>,
}
impl GcpOrganizationalDataMember {
    pub fn new(gcp_organizational_data: GcpOrganizationalData) -> Self {
        Self {
            gcp_organizational_data,
            parent_hierarchy_id: None,
            management_project_number: None,
        }
    }
}
#[doc = "The gcpOrganization data for the parent account"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct GcpOrganizationalDataOrganization {
    #[serde(flatten)]
    pub gcp_organizational_data: GcpOrganizationalData,
    #[doc = "If the multi cloud account is of membership type organization, list of accounts excluded from offering"]
    #[serde(
        rename = "excludedProjectNumbers",
        default,
        deserialize_with = "azure_core::util::deserialize_null_as_default",
        skip_serializing_if = "Vec::is_empty"
    )]
    pub excluded_project_numbers: Vec<String>,
    #[doc = "The service account email address which represents the organization level permissions container."]
    #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
    pub service_account_email_address: Option<String>,
    #[doc = "The GCP workload identity provider id which represents the permissions required to auto provision security connectors"]
    #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
    pub workload_identity_provider_id: Option<String>,
}
impl GcpOrganizationalDataOrganization {
    pub fn new(gcp_organizational_data: GcpOrganizationalData) -> Self {
        Self {
            gcp_organizational_data,
            excluded_project_numbers: Vec::new(),
            service_account_email_address: None,
            workload_identity_provider_id: None,
        }
    }
}
#[doc = "The details about the project represented by the security connector"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct GcpProjectDetails {
    #[doc = "The unique GCP Project number"]
    #[serde(rename = "projectNumber", default, skip_serializing_if = "Option::is_none")]
    pub project_number: Option<String>,
    #[doc = "The GCP Project id"]
    #[serde(rename = "projectId", default, skip_serializing_if = "Option::is_none")]
    pub project_id: Option<String>,
    #[doc = "The GCP workload identity federation pool id"]
    #[serde(rename = "workloadIdentityPoolId", default, skip_serializing_if = "Option::is_none")]
    pub workload_identity_pool_id: Option<String>,
}
impl GcpProjectDetails {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The GCP project connector environment data"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct GcpProjectEnvironmentData {
    #[serde(flatten)]
    pub environment_data: EnvironmentData,
    #[doc = "The gcpOrganization data"]
    #[serde(rename = "organizationalData", default, skip_serializing_if = "Option::is_none")]
    pub organizational_data: Option<GcpOrganizationalData>,
    #[doc = "The details about the project represented by the security connector"]
    #[serde(rename = "projectDetails", default, skip_serializing_if = "Option::is_none")]
    pub project_details: Option<GcpProjectDetails>,
}
impl GcpProjectEnvironmentData {
    pub fn new(environment_data: EnvironmentData) -> Self {
        Self {
            environment_data,
            organizational_data: None,
            project_details: None,
        }
    }
}
#[doc = "The github scope connector's environment data"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct GithubScopeEnvironmentData {
    #[serde(flatten)]
    pub environment_data: EnvironmentData,
}
impl GithubScopeEnvironmentData {
    pub fn new(environment_data: EnvironmentData) -> Self {
        Self { environment_data }
    }
}
#[doc = "Describes an Azure resource with kind"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct Kind {
    #[doc = "Kind of the resource"]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub kind: Option<String>,
}
impl Kind {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "Describes an Azure resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct Resource {
    #[doc = "Resource Id"]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[doc = "Resource name"]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[doc = "Resource type"]
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}
impl Resource {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The security connector resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct SecurityConnector {
    #[serde(flatten)]
    pub tracked_resource: TrackedResource,
    #[doc = "Metadata pertaining to creation and last modification of the resource."]
    #[serde(rename = "systemData", default, skip_serializing_if = "Option::is_none")]
    pub system_data: Option<SystemData>,
    #[doc = "A set of properties that defines the security connector configuration."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub properties: Option<SecurityConnectorProperties>,
}
impl SecurityConnector {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "A set of properties that defines the security connector configuration."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct SecurityConnectorProperties {
    #[doc = "The multi cloud resource identifier (account id in case of AWS connector, project number in case of GCP connector)."]
    #[serde(rename = "hierarchyIdentifier", default, skip_serializing_if = "Option::is_none")]
    pub hierarchy_identifier: Option<String>,
    #[doc = "The date on which the trial period will end, if applicable. Trial period exists for 30 days after upgrading to payed offerings."]
    #[serde(rename = "hierarchyIdentifierTrialEndDate", default, with = "azure_core::date::rfc3339::option")]
    pub hierarchy_identifier_trial_end_date: Option<time::OffsetDateTime>,
    #[doc = "The multi cloud resource's cloud name."]
    #[serde(rename = "environmentName", default, skip_serializing_if = "Option::is_none")]
    pub environment_name: Option<security_connector_properties::EnvironmentName>,
    #[doc = "A collection of offerings for the security connector."]
    #[serde(
        default,
        deserialize_with = "azure_core::util::deserialize_null_as_default",
        skip_serializing_if = "Vec::is_empty"
    )]
    pub offerings: Vec<CloudOffering>,
    #[doc = "The security connector environment data."]
    #[serde(rename = "environmentData", default, skip_serializing_if = "Option::is_none")]
    pub environment_data: Option<EnvironmentData>,
}
impl SecurityConnectorProperties {
    pub fn new() -> Self {
        Self::default()
    }
}
pub mod security_connector_properties {
    use super::*;
    #[doc = "The multi cloud resource's cloud name."]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "EnvironmentName")]
    pub enum EnvironmentName {
        Azure,
        #[serde(rename = "AWS")]
        Aws,
        #[serde(rename = "GCP")]
        Gcp,
        Github,
        AzureDevOps,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for EnvironmentName {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for EnvironmentName {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for EnvironmentName {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::Azure => serializer.serialize_unit_variant("EnvironmentName", 0u32, "Azure"),
                Self::Aws => serializer.serialize_unit_variant("EnvironmentName", 1u32, "AWS"),
                Self::Gcp => serializer.serialize_unit_variant("EnvironmentName", 2u32, "GCP"),
                Self::Github => serializer.serialize_unit_variant("EnvironmentName", 3u32, "Github"),
                Self::AzureDevOps => serializer.serialize_unit_variant("EnvironmentName", 4u32, "AzureDevOps"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}
#[doc = "List of security connectors response."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct SecurityConnectorsList {
    #[doc = "The list of security connectors under the given scope."]
    pub value: Vec<SecurityConnector>,
    #[doc = "The URI to fetch the next page."]
    #[serde(rename = "nextLink", default, skip_serializing_if = "Option::is_none")]
    pub next_link: Option<String>,
}
impl azure_core::Continuable for SecurityConnectorsList {
    type Continuation = String;
    fn continuation(&self) -> Option<Self::Continuation> {
        self.next_link.clone()
    }
}
impl SecurityConnectorsList {
    pub fn new(value: Vec<SecurityConnector>) -> Self {
        Self { value, next_link: None }
    }
}
#[doc = "A list of key value pairs that describe the resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct Tags {
    #[doc = "A list of key value pairs that describe the resource."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<serde_json::Value>,
}
impl Tags {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "Describes an Azure tracked resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct TrackedResource {
    #[serde(flatten)]
    pub resource: Resource,
    #[serde(flatten)]
    pub azure_tracked_resource_location: AzureTrackedResourceLocation,
    #[serde(flatten)]
    pub kind: Kind,
    #[serde(flatten)]
    pub e_tag: ETag,
    #[serde(flatten)]
    pub tags: Tags,
}
impl TrackedResource {
    pub fn new() -> Self {
        Self::default()
    }
}
#[doc = "The security offering details"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CloudOffering {
    #[doc = "The type of the security offering."]
    #[serde(rename = "offeringType")]
    pub offering_type: cloud_offering::OfferingType,
    #[doc = "The offering description."]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
}
impl CloudOffering {
    pub fn new(offering_type: cloud_offering::OfferingType) -> Self {
        Self {
            offering_type,
            description: None,
        }
    }
}
pub mod cloud_offering {
    use super::*;
    #[doc = "The type of the security offering."]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "OfferingType")]
    pub enum OfferingType {
        CspmMonitorAws,
        DefenderForContainersAws,
        DefenderForServersAws,
        DefenderForDatabasesAws,
        InformationProtectionAws,
        CspmMonitorGcp,
        CspmMonitorGithub,
        CspmMonitorAzureDevOps,
        DefenderForServersGcp,
        DefenderForContainersGcp,
        DefenderForDatabasesGcp,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for OfferingType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for OfferingType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for OfferingType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::CspmMonitorAws => serializer.serialize_unit_variant("OfferingType", 0u32, "CspmMonitorAws"),
                Self::DefenderForContainersAws => serializer.serialize_unit_variant("OfferingType", 1u32, "DefenderForContainersAws"),
                Self::DefenderForServersAws => serializer.serialize_unit_variant("OfferingType", 2u32, "DefenderForServersAws"),
                Self::DefenderForDatabasesAws => serializer.serialize_unit_variant("OfferingType", 3u32, "DefenderForDatabasesAws"),
                Self::InformationProtectionAws => serializer.serialize_unit_variant("OfferingType", 4u32, "InformationProtectionAws"),
                Self::CspmMonitorGcp => serializer.serialize_unit_variant("OfferingType", 5u32, "CspmMonitorGcp"),
                Self::CspmMonitorGithub => serializer.serialize_unit_variant("OfferingType", 6u32, "CspmMonitorGithub"),
                Self::CspmMonitorAzureDevOps => serializer.serialize_unit_variant("OfferingType", 7u32, "CspmMonitorAzureDevOps"),
                Self::DefenderForServersGcp => serializer.serialize_unit_variant("OfferingType", 8u32, "DefenderForServersGcp"),
                Self::DefenderForContainersGcp => serializer.serialize_unit_variant("OfferingType", 9u32, "DefenderForContainersGcp"),
                Self::DefenderForDatabasesGcp => serializer.serialize_unit_variant("OfferingType", 10u32, "DefenderForDatabasesGcp"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}
#[doc = "The CSPM monitoring for AWS offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CspmMonitorAwsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The native cloud connection configuration"]
    #[serde(rename = "nativeCloudConnection", default, skip_serializing_if = "Option::is_none")]
    pub native_cloud_connection: Option<cspm_monitor_aws_offering::NativeCloudConnection>,
}
impl CspmMonitorAwsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            native_cloud_connection: None,
        }
    }
}
pub mod cspm_monitor_aws_offering {
    use super::*;
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct NativeCloudConnection {
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl NativeCloudConnection {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "The CSPM monitoring for AzureDevOps offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CspmMonitorAzureDevOpsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
}
impl CspmMonitorAzureDevOpsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self { cloud_offering }
    }
}
#[doc = "The CSPM monitoring for GCP offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CspmMonitorGcpOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The native cloud connection configuration"]
    #[serde(rename = "nativeCloudConnection", default, skip_serializing_if = "Option::is_none")]
    pub native_cloud_connection: Option<cspm_monitor_gcp_offering::NativeCloudConnection>,
}
impl CspmMonitorGcpOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            native_cloud_connection: None,
        }
    }
}
pub mod cspm_monitor_gcp_offering {
    use super::*;
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct NativeCloudConnection {
        #[doc = "The GCP workload identity provider id for the offering"]
        #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
        pub workload_identity_provider_id: Option<String>,
        #[doc = "The service account email address in GCP for this offering"]
        #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
        pub service_account_email_address: Option<String>,
    }
    impl NativeCloudConnection {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "The CSPM monitoring for github offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CspmMonitorGithubOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
}
impl CspmMonitorGithubOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self { cloud_offering }
    }
}
#[doc = "The Defender for Databases AWS offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderFoDatabasesAwsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The ARC autoprovisioning configuration"]
    #[serde(rename = "arcAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub arc_auto_provisioning: Option<defender_fo_databases_aws_offering::ArcAutoProvisioning>,
}
impl DefenderFoDatabasesAwsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            arc_auto_provisioning: None,
        }
    }
}
pub mod defender_fo_databases_aws_offering {
    use super::*;
    #[doc = "The ARC autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ArcAutoProvisioning {
        #[doc = "Is arc auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
        #[doc = "Metadata of Service Principal secret for autoprovisioning"]
        #[serde(rename = "servicePrincipalSecretMetadata", default, skip_serializing_if = "Option::is_none")]
        pub service_principal_secret_metadata: Option<arc_auto_provisioning::ServicePrincipalSecretMetadata>,
    }
    impl ArcAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod arc_auto_provisioning {
        use super::*;
        #[doc = "Metadata of Service Principal secret for autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct ServicePrincipalSecretMetadata {
            #[doc = "expiration date of service principal secret"]
            #[serde(rename = "expiryDate", default, with = "azure_core::date::rfc3339::option")]
            pub expiry_date: Option<time::OffsetDateTime>,
            #[doc = "region of parameter store where secret is kept"]
            #[serde(rename = "parameterStoreRegion", default, skip_serializing_if = "Option::is_none")]
            pub parameter_store_region: Option<String>,
            #[doc = "name of secret resource in parameter store"]
            #[serde(rename = "parameterNameInStore", default, skip_serializing_if = "Option::is_none")]
            pub parameter_name_in_store: Option<String>,
        }
        impl ServicePrincipalSecretMetadata {
            pub fn new() -> Self {
                Self::default()
            }
        }
    }
}
#[doc = "The Defender for Containers AWS offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderForContainersAwsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The kubernetes service connection configuration"]
    #[serde(rename = "kubernetesService", default, skip_serializing_if = "Option::is_none")]
    pub kubernetes_service: Option<defender_for_containers_aws_offering::KubernetesService>,
    #[doc = "The kubernetes to scuba connection configuration"]
    #[serde(rename = "kubernetesScubaReader", default, skip_serializing_if = "Option::is_none")]
    pub kubernetes_scuba_reader: Option<defender_for_containers_aws_offering::KubernetesScubaReader>,
    #[doc = "The cloudwatch to kinesis connection configuration"]
    #[serde(rename = "cloudWatchToKinesis", default, skip_serializing_if = "Option::is_none")]
    pub cloud_watch_to_kinesis: Option<defender_for_containers_aws_offering::CloudWatchToKinesis>,
    #[doc = "The kinesis to s3 connection configuration"]
    #[serde(rename = "kinesisToS3", default, skip_serializing_if = "Option::is_none")]
    pub kinesis_to_s3: Option<defender_for_containers_aws_offering::KinesisToS3>,
    #[doc = "The container vulnerability assessment configuration"]
    #[serde(rename = "containerVulnerabilityAssessment", default, skip_serializing_if = "Option::is_none")]
    pub container_vulnerability_assessment: Option<defender_for_containers_aws_offering::ContainerVulnerabilityAssessment>,
    #[doc = "The container vulnerability assessment task configuration"]
    #[serde(rename = "containerVulnerabilityAssessmentTask", default, skip_serializing_if = "Option::is_none")]
    pub container_vulnerability_assessment_task: Option<defender_for_containers_aws_offering::ContainerVulnerabilityAssessmentTask>,
    #[doc = "Enable container vulnerability assessment feature"]
    #[serde(
        rename = "enableContainerVulnerabilityAssessment",
        default,
        skip_serializing_if = "Option::is_none"
    )]
    pub enable_container_vulnerability_assessment: Option<bool>,
    #[doc = "Is audit logs pipeline auto provisioning enabled"]
    #[serde(rename = "autoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub auto_provisioning: Option<bool>,
    #[doc = "The retention time in days of kube audit logs set on the CloudWatch log group"]
    #[serde(rename = "kubeAuditRetentionTime", default, skip_serializing_if = "Option::is_none")]
    pub kube_audit_retention_time: Option<i64>,
    #[doc = "The externalId used by the data reader to prevent the confused deputy attack"]
    #[serde(rename = "scubaExternalId", default, skip_serializing_if = "Option::is_none")]
    pub scuba_external_id: Option<String>,
}
impl DefenderForContainersAwsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            kubernetes_service: None,
            kubernetes_scuba_reader: None,
            cloud_watch_to_kinesis: None,
            kinesis_to_s3: None,
            container_vulnerability_assessment: None,
            container_vulnerability_assessment_task: None,
            enable_container_vulnerability_assessment: None,
            auto_provisioning: None,
            kube_audit_retention_time: None,
            scuba_external_id: None,
        }
    }
}
pub mod defender_for_containers_aws_offering {
    use super::*;
    #[doc = "The kubernetes service connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct KubernetesService {
        #[doc = "The cloud role ARN in AWS for this feature used for provisioning resources"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl KubernetesService {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The kubernetes to scuba connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct KubernetesScubaReader {
        #[doc = "The cloud role ARN in AWS for this feature used for reading data"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl KubernetesScubaReader {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The cloudwatch to kinesis connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct CloudWatchToKinesis {
        #[doc = "The cloud role ARN in AWS used by CloudWatch to transfer data into Kinesis"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl CloudWatchToKinesis {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The kinesis to s3 connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct KinesisToS3 {
        #[doc = "The cloud role ARN in AWS used by Kinesis to transfer data into S3"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl KinesisToS3 {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The container vulnerability assessment configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ContainerVulnerabilityAssessment {
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl ContainerVulnerabilityAssessment {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The container vulnerability assessment task configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ContainerVulnerabilityAssessmentTask {
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl ContainerVulnerabilityAssessmentTask {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "The containers GCP offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderForContainersGcpOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The native cloud connection configuration"]
    #[serde(rename = "nativeCloudConnection", default, skip_serializing_if = "Option::is_none")]
    pub native_cloud_connection: Option<defender_for_containers_gcp_offering::NativeCloudConnection>,
    #[doc = "The native cloud connection configuration"]
    #[serde(rename = "dataPipelineNativeCloudConnection", default, skip_serializing_if = "Option::is_none")]
    pub data_pipeline_native_cloud_connection: Option<defender_for_containers_gcp_offering::DataPipelineNativeCloudConnection>,
    #[doc = "Is audit logs data collection enabled"]
    #[serde(rename = "auditLogsAutoProvisioningFlag", default, skip_serializing_if = "Option::is_none")]
    pub audit_logs_auto_provisioning_flag: Option<bool>,
    #[doc = "Is Microsoft Defender for Cloud Kubernetes agent auto provisioning enabled"]
    #[serde(rename = "defenderAgentAutoProvisioningFlag", default, skip_serializing_if = "Option::is_none")]
    pub defender_agent_auto_provisioning_flag: Option<bool>,
    #[doc = "Is Policy Kubernetes agent auto provisioning enabled"]
    #[serde(rename = "policyAgentAutoProvisioningFlag", default, skip_serializing_if = "Option::is_none")]
    pub policy_agent_auto_provisioning_flag: Option<bool>,
}
impl DefenderForContainersGcpOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            native_cloud_connection: None,
            data_pipeline_native_cloud_connection: None,
            audit_logs_auto_provisioning_flag: None,
            defender_agent_auto_provisioning_flag: None,
            policy_agent_auto_provisioning_flag: None,
        }
    }
}
pub mod defender_for_containers_gcp_offering {
    use super::*;
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct NativeCloudConnection {
        #[doc = "The service account email address in GCP for this offering"]
        #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
        pub service_account_email_address: Option<String>,
        #[doc = "The GCP workload identity provider id for this offering"]
        #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
        pub workload_identity_provider_id: Option<String>,
    }
    impl NativeCloudConnection {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct DataPipelineNativeCloudConnection {
        #[doc = "The data collection service account email address in GCP for this offering"]
        #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
        pub service_account_email_address: Option<String>,
        #[doc = "The data collection GCP workload identity provider id for this offering"]
        #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
        pub workload_identity_provider_id: Option<String>,
    }
    impl DataPipelineNativeCloudConnection {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "The Defender for Databases GCP offering configurations"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderForDatabasesGcpOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The ARC autoprovisioning configuration"]
    #[serde(rename = "arcAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub arc_auto_provisioning: Option<defender_for_databases_gcp_offering::ArcAutoProvisioning>,
    #[doc = "The native cloud connection configuration"]
    #[serde(
        rename = "defenderForDatabasesArcAutoProvisioning",
        default,
        skip_serializing_if = "Option::is_none"
    )]
    pub defender_for_databases_arc_auto_provisioning: Option<defender_for_databases_gcp_offering::DefenderForDatabasesArcAutoProvisioning>,
}
impl DefenderForDatabasesGcpOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            arc_auto_provisioning: None,
            defender_for_databases_arc_auto_provisioning: None,
        }
    }
}
pub mod defender_for_databases_gcp_offering {
    use super::*;
    #[doc = "The ARC autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ArcAutoProvisioning {
        #[doc = "Is arc auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "Configuration for ARC autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<arc_auto_provisioning::Configuration>,
    }
    impl ArcAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod arc_auto_provisioning {
        use super::*;
        #[doc = "Configuration for ARC autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct Configuration {
            #[doc = "The Azure service principal client id for agent onboarding"]
            #[serde(rename = "clientId", default, skip_serializing_if = "Option::is_none")]
            pub client_id: Option<String>,
            #[doc = "The agent onboarding service account numeric id"]
            #[serde(
                rename = "agentOnboardingServiceAccountNumericId",
                default,
                skip_serializing_if = "Option::is_none"
            )]
            pub agent_onboarding_service_account_numeric_id: Option<String>,
        }
        impl Configuration {
            pub fn new() -> Self {
                Self::default()
            }
        }
    }
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct DefenderForDatabasesArcAutoProvisioning {
        #[doc = "The service account email address in GCP for this offering"]
        #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
        pub service_account_email_address: Option<String>,
        #[doc = "The GCP workload identity provider id for this offering"]
        #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
        pub workload_identity_provider_id: Option<String>,
    }
    impl DefenderForDatabasesArcAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "The Defender for Servers AWS offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderForServersAwsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The Defender for servers connection configuration"]
    #[serde(rename = "defenderForServers", default, skip_serializing_if = "Option::is_none")]
    pub defender_for_servers: Option<defender_for_servers_aws_offering::DefenderForServers>,
    #[doc = "The ARC autoprovisioning configuration"]
    #[serde(rename = "arcAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub arc_auto_provisioning: Option<defender_for_servers_aws_offering::ArcAutoProvisioning>,
    #[doc = "The Vulnerability Assessment autoprovisioning configuration"]
    #[serde(rename = "vaAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub va_auto_provisioning: Option<defender_for_servers_aws_offering::VaAutoProvisioning>,
    #[doc = "The Microsoft Defender for Endpoint autoprovisioning configuration"]
    #[serde(rename = "mdeAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub mde_auto_provisioning: Option<defender_for_servers_aws_offering::MdeAutoProvisioning>,
    #[doc = "configuration for the servers offering subPlan"]
    #[serde(rename = "subPlan", default, skip_serializing_if = "Option::is_none")]
    pub sub_plan: Option<defender_for_servers_aws_offering::SubPlan>,
    #[doc = "The Microsoft Defender for Server VM scanning configuration"]
    #[serde(rename = "vmScanners", default, skip_serializing_if = "Option::is_none")]
    pub vm_scanners: Option<defender_for_servers_aws_offering::VmScanners>,
}
impl DefenderForServersAwsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            defender_for_servers: None,
            arc_auto_provisioning: None,
            va_auto_provisioning: None,
            mde_auto_provisioning: None,
            sub_plan: None,
            vm_scanners: None,
        }
    }
}
pub mod defender_for_servers_aws_offering {
    use super::*;
    #[doc = "The Defender for servers connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct DefenderForServers {
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl DefenderForServers {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The ARC autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ArcAutoProvisioning {
        #[doc = "Is arc auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
        #[doc = "Metadata of Service Principal secret for autoprovisioning"]
        #[serde(rename = "servicePrincipalSecretMetadata", default, skip_serializing_if = "Option::is_none")]
        pub service_principal_secret_metadata: Option<arc_auto_provisioning::ServicePrincipalSecretMetadata>,
    }
    impl ArcAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod arc_auto_provisioning {
        use super::*;
        #[doc = "Metadata of Service Principal secret for autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct ServicePrincipalSecretMetadata {
            #[doc = "expiration date of service principal secret"]
            #[serde(rename = "expiryDate", default, skip_serializing_if = "Option::is_none")]
            pub expiry_date: Option<String>,
            #[doc = "region of parameter store where secret is kept"]
            #[serde(rename = "parameterStoreRegion", default, skip_serializing_if = "Option::is_none")]
            pub parameter_store_region: Option<String>,
            #[doc = "name of secret resource in parameter store"]
            #[serde(rename = "parameterNameInStore", default, skip_serializing_if = "Option::is_none")]
            pub parameter_name_in_store: Option<String>,
        }
        impl ServicePrincipalSecretMetadata {
            pub fn new() -> Self {
                Self::default()
            }
        }
    }
    #[doc = "The Vulnerability Assessment autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct VaAutoProvisioning {
        #[doc = "Is Vulnerability Assessment auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "configuration for Vulnerability Assessment autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<va_auto_provisioning::Configuration>,
    }
    impl VaAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod va_auto_provisioning {
        use super::*;
        #[doc = "configuration for Vulnerability Assessment autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct Configuration {
            #[doc = "The Vulnerability Assessment solution to be provisioned. Can be either 'TVM' or 'Qualys'"]
            #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
            pub type_: Option<configuration::Type>,
        }
        impl Configuration {
            pub fn new() -> Self {
                Self::default()
            }
        }
        pub mod configuration {
            use super::*;
            #[doc = "The Vulnerability Assessment solution to be provisioned. Can be either 'TVM' or 'Qualys'"]
            #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
            #[serde(remote = "Type")]
            pub enum Type {
                Qualys,
                #[serde(rename = "TVM")]
                Tvm,
                #[serde(skip_deserializing)]
                UnknownValue(String),
            }
            impl FromStr for Type {
                type Err = value::Error;
                fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
                    Self::deserialize(s.into_deserializer())
                }
            }
            impl<'de> Deserialize<'de> for Type {
                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
                where
                    D: Deserializer<'de>,
                {
                    let s = String::deserialize(deserializer)?;
                    let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
                    Ok(deserialized)
                }
            }
            impl Serialize for Type {
                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
                where
                    S: Serializer,
                {
                    match self {
                        Self::Qualys => serializer.serialize_unit_variant("Type", 0u32, "Qualys"),
                        Self::Tvm => serializer.serialize_unit_variant("Type", 1u32, "TVM"),
                        Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
                    }
                }
            }
        }
    }
    #[doc = "The Microsoft Defender for Endpoint autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct MdeAutoProvisioning {
        #[doc = "Is Microsoft Defender for Endpoint auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "configuration for Microsoft Defender for Endpoint autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<serde_json::Value>,
    }
    impl MdeAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "configuration for the servers offering subPlan"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct SubPlan {
        #[doc = "The available sub plans"]
        #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
        pub type_: Option<sub_plan::Type>,
    }
    impl SubPlan {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod sub_plan {
        use super::*;
        #[doc = "The available sub plans"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
        #[serde(remote = "Type")]
        pub enum Type {
            P1,
            P2,
            #[serde(skip_deserializing)]
            UnknownValue(String),
        }
        impl FromStr for Type {
            type Err = value::Error;
            fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
                Self::deserialize(s.into_deserializer())
            }
        }
        impl<'de> Deserialize<'de> for Type {
            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
            where
                D: Deserializer<'de>,
            {
                let s = String::deserialize(deserializer)?;
                let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
                Ok(deserialized)
            }
        }
        impl Serialize for Type {
            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
            where
                S: Serializer,
            {
                match self {
                    Self::P1 => serializer.serialize_unit_variant("Type", 0u32, "P1"),
                    Self::P2 => serializer.serialize_unit_variant("Type", 1u32, "P2"),
                    Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
                }
            }
        }
    }
    #[doc = "The Microsoft Defender for Server VM scanning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct VmScanners {
        #[doc = "Is Microsoft Defender for Server VM scanning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "configuration for Microsoft Defender for Server VM scanning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<vm_scanners::Configuration>,
    }
    impl VmScanners {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod vm_scanners {
        use super::*;
        #[doc = "configuration for Microsoft Defender for Server VM scanning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct Configuration {
            #[doc = "The cloud role ARN in AWS for this feature"]
            #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
            pub cloud_role_arn: Option<String>,
            #[doc = "The scanning mode for the vm scan."]
            #[serde(rename = "scanningMode", default, skip_serializing_if = "Option::is_none")]
            pub scanning_mode: Option<configuration::ScanningMode>,
            #[doc = "VM tags that indicates that VM should not be scanned"]
            #[serde(rename = "exclusionTags", default, skip_serializing_if = "Option::is_none")]
            pub exclusion_tags: Option<serde_json::Value>,
        }
        impl Configuration {
            pub fn new() -> Self {
                Self::default()
            }
        }
        pub mod configuration {
            use super::*;
            #[doc = "The scanning mode for the vm scan."]
            #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
            #[serde(remote = "ScanningMode")]
            pub enum ScanningMode {
                Default,
                #[serde(skip_deserializing)]
                UnknownValue(String),
            }
            impl FromStr for ScanningMode {
                type Err = value::Error;
                fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
                    Self::deserialize(s.into_deserializer())
                }
            }
            impl<'de> Deserialize<'de> for ScanningMode {
                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
                where
                    D: Deserializer<'de>,
                {
                    let s = String::deserialize(deserializer)?;
                    let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
                    Ok(deserialized)
                }
            }
            impl Serialize for ScanningMode {
                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
                where
                    S: Serializer,
                {
                    match self {
                        Self::Default => serializer.serialize_unit_variant("ScanningMode", 0u32, "Default"),
                        Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
                    }
                }
            }
        }
    }
}
#[doc = "The Defender for Servers GCP offering configurations"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DefenderForServersGcpOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The Defender for servers connection configuration"]
    #[serde(rename = "defenderForServers", default, skip_serializing_if = "Option::is_none")]
    pub defender_for_servers: Option<defender_for_servers_gcp_offering::DefenderForServers>,
    #[doc = "The ARC autoprovisioning configuration"]
    #[serde(rename = "arcAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub arc_auto_provisioning: Option<defender_for_servers_gcp_offering::ArcAutoProvisioning>,
    #[doc = "The Vulnerability Assessment autoprovisioning configuration"]
    #[serde(rename = "vaAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub va_auto_provisioning: Option<defender_for_servers_gcp_offering::VaAutoProvisioning>,
    #[doc = "The Microsoft Defender for Endpoint autoprovisioning configuration"]
    #[serde(rename = "mdeAutoProvisioning", default, skip_serializing_if = "Option::is_none")]
    pub mde_auto_provisioning: Option<defender_for_servers_gcp_offering::MdeAutoProvisioning>,
    #[doc = "configuration for the servers offering subPlan"]
    #[serde(rename = "subPlan", default, skip_serializing_if = "Option::is_none")]
    pub sub_plan: Option<defender_for_servers_gcp_offering::SubPlan>,
}
impl DefenderForServersGcpOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            defender_for_servers: None,
            arc_auto_provisioning: None,
            va_auto_provisioning: None,
            mde_auto_provisioning: None,
            sub_plan: None,
        }
    }
}
pub mod defender_for_servers_gcp_offering {
    use super::*;
    #[doc = "The Defender for servers connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct DefenderForServers {
        #[doc = "The workload identity provider id in GCP for this feature"]
        #[serde(rename = "workloadIdentityProviderId", default, skip_serializing_if = "Option::is_none")]
        pub workload_identity_provider_id: Option<String>,
        #[doc = "The service account email address in GCP for this feature"]
        #[serde(rename = "serviceAccountEmailAddress", default, skip_serializing_if = "Option::is_none")]
        pub service_account_email_address: Option<String>,
    }
    impl DefenderForServers {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "The ARC autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct ArcAutoProvisioning {
        #[doc = "Is arc auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "Configuration for ARC autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<arc_auto_provisioning::Configuration>,
    }
    impl ArcAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod arc_auto_provisioning {
        use super::*;
        #[doc = "Configuration for ARC autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct Configuration {
            #[doc = "The Azure service principal client id for agent onboarding"]
            #[serde(rename = "clientId", default, skip_serializing_if = "Option::is_none")]
            pub client_id: Option<String>,
            #[doc = "The agent onboarding service account numeric id"]
            #[serde(
                rename = "agentOnboardingServiceAccountNumericId",
                default,
                skip_serializing_if = "Option::is_none"
            )]
            pub agent_onboarding_service_account_numeric_id: Option<String>,
        }
        impl Configuration {
            pub fn new() -> Self {
                Self::default()
            }
        }
    }
    #[doc = "The Vulnerability Assessment autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct VaAutoProvisioning {
        #[doc = "Is Vulnerability Assessment auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "configuration for Vulnerability Assessment autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<va_auto_provisioning::Configuration>,
    }
    impl VaAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod va_auto_provisioning {
        use super::*;
        #[doc = "configuration for Vulnerability Assessment autoprovisioning"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
        pub struct Configuration {
            #[doc = "The Vulnerability Assessment solution to be provisioned. Can be either 'TVM' or 'Qualys'"]
            #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
            pub type_: Option<configuration::Type>,
        }
        impl Configuration {
            pub fn new() -> Self {
                Self::default()
            }
        }
        pub mod configuration {
            use super::*;
            #[doc = "The Vulnerability Assessment solution to be provisioned. Can be either 'TVM' or 'Qualys'"]
            #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
            #[serde(remote = "Type")]
            pub enum Type {
                Qualys,
                #[serde(rename = "TVM")]
                Tvm,
                #[serde(skip_deserializing)]
                UnknownValue(String),
            }
            impl FromStr for Type {
                type Err = value::Error;
                fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
                    Self::deserialize(s.into_deserializer())
                }
            }
            impl<'de> Deserialize<'de> for Type {
                fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
                where
                    D: Deserializer<'de>,
                {
                    let s = String::deserialize(deserializer)?;
                    let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
                    Ok(deserialized)
                }
            }
            impl Serialize for Type {
                fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
                where
                    S: Serializer,
                {
                    match self {
                        Self::Qualys => serializer.serialize_unit_variant("Type", 0u32, "Qualys"),
                        Self::Tvm => serializer.serialize_unit_variant("Type", 1u32, "TVM"),
                        Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
                    }
                }
            }
        }
    }
    #[doc = "The Microsoft Defender for Endpoint autoprovisioning configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct MdeAutoProvisioning {
        #[doc = "Is Microsoft Defender for Endpoint auto provisioning enabled"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub enabled: Option<bool>,
        #[doc = "configuration for Microsoft Defender for Endpoint autoprovisioning"]
        #[serde(default, skip_serializing_if = "Option::is_none")]
        pub configuration: Option<serde_json::Value>,
    }
    impl MdeAutoProvisioning {
        pub fn new() -> Self {
            Self::default()
        }
    }
    #[doc = "configuration for the servers offering subPlan"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct SubPlan {
        #[doc = "The available sub plans"]
        #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
        pub type_: Option<sub_plan::Type>,
    }
    impl SubPlan {
        pub fn new() -> Self {
            Self::default()
        }
    }
    pub mod sub_plan {
        use super::*;
        #[doc = "The available sub plans"]
        #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
        #[serde(remote = "Type")]
        pub enum Type {
            P1,
            P2,
            #[serde(skip_deserializing)]
            UnknownValue(String),
        }
        impl FromStr for Type {
            type Err = value::Error;
            fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
                Self::deserialize(s.into_deserializer())
            }
        }
        impl<'de> Deserialize<'de> for Type {
            fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
            where
                D: Deserializer<'de>,
            {
                let s = String::deserialize(deserializer)?;
                let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
                Ok(deserialized)
            }
        }
        impl Serialize for Type {
            fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
            where
                S: Serializer,
            {
                match self {
                    Self::P1 => serializer.serialize_unit_variant("Type", 0u32, "P1"),
                    Self::P2 => serializer.serialize_unit_variant("Type", 1u32, "P2"),
                    Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
                }
            }
        }
    }
}
#[doc = "The information protection for AWS offering"]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct InformationProtectionAwsOffering {
    #[serde(flatten)]
    pub cloud_offering: CloudOffering,
    #[doc = "The native cloud connection configuration"]
    #[serde(rename = "informationProtection", default, skip_serializing_if = "Option::is_none")]
    pub information_protection: Option<information_protection_aws_offering::InformationProtection>,
}
impl InformationProtectionAwsOffering {
    pub fn new(cloud_offering: CloudOffering) -> Self {
        Self {
            cloud_offering,
            information_protection: None,
        }
    }
}
pub mod information_protection_aws_offering {
    use super::*;
    #[doc = "The native cloud connection configuration"]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
    pub struct InformationProtection {
        #[doc = "The cloud role ARN in AWS for this feature"]
        #[serde(rename = "cloudRoleArn", default, skip_serializing_if = "Option::is_none")]
        pub cloud_role_arn: Option<String>,
    }
    impl InformationProtection {
        pub fn new() -> Self {
            Self::default()
        }
    }
}
#[doc = "Metadata pertaining to creation and last modification of the resource."]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
pub struct SystemData {
    #[doc = "The identity that created the resource."]
    #[serde(rename = "createdBy", default, skip_serializing_if = "Option::is_none")]
    pub created_by: Option<String>,
    #[doc = "The type of identity that created the resource."]
    #[serde(rename = "createdByType", default, skip_serializing_if = "Option::is_none")]
    pub created_by_type: Option<system_data::CreatedByType>,
    #[doc = "The timestamp of resource creation (UTC)."]
    #[serde(rename = "createdAt", default, with = "azure_core::date::rfc3339::option")]
    pub created_at: Option<time::OffsetDateTime>,
    #[doc = "The identity that last modified the resource."]
    #[serde(rename = "lastModifiedBy", default, skip_serializing_if = "Option::is_none")]
    pub last_modified_by: Option<String>,
    #[doc = "The type of identity that last modified the resource."]
    #[serde(rename = "lastModifiedByType", default, skip_serializing_if = "Option::is_none")]
    pub last_modified_by_type: Option<system_data::LastModifiedByType>,
    #[doc = "The timestamp of resource last modification (UTC)"]
    #[serde(rename = "lastModifiedAt", default, with = "azure_core::date::rfc3339::option")]
    pub last_modified_at: Option<time::OffsetDateTime>,
}
impl SystemData {
    pub fn new() -> Self {
        Self::default()
    }
}
pub mod system_data {
    use super::*;
    #[doc = "The type of identity that created the resource."]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "CreatedByType")]
    pub enum CreatedByType {
        User,
        Application,
        ManagedIdentity,
        Key,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for CreatedByType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for CreatedByType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for CreatedByType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::User => serializer.serialize_unit_variant("CreatedByType", 0u32, "User"),
                Self::Application => serializer.serialize_unit_variant("CreatedByType", 1u32, "Application"),
                Self::ManagedIdentity => serializer.serialize_unit_variant("CreatedByType", 2u32, "ManagedIdentity"),
                Self::Key => serializer.serialize_unit_variant("CreatedByType", 3u32, "Key"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
    #[doc = "The type of identity that last modified the resource."]
    #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
    #[serde(remote = "LastModifiedByType")]
    pub enum LastModifiedByType {
        User,
        Application,
        ManagedIdentity,
        Key,
        #[serde(skip_deserializing)]
        UnknownValue(String),
    }
    impl FromStr for LastModifiedByType {
        type Err = value::Error;
        fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
            Self::deserialize(s.into_deserializer())
        }
    }
    impl<'de> Deserialize<'de> for LastModifiedByType {
        fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
        where
            D: Deserializer<'de>,
        {
            let s = String::deserialize(deserializer)?;
            let deserialized = Self::from_str(&s).unwrap_or(Self::UnknownValue(s));
            Ok(deserialized)
        }
    }
    impl Serialize for LastModifiedByType {
        fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
        where
            S: Serializer,
        {
            match self {
                Self::User => serializer.serialize_unit_variant("LastModifiedByType", 0u32, "User"),
                Self::Application => serializer.serialize_unit_variant("LastModifiedByType", 1u32, "Application"),
                Self::ManagedIdentity => serializer.serialize_unit_variant("LastModifiedByType", 2u32, "ManagedIdentity"),
                Self::Key => serializer.serialize_unit_variant("LastModifiedByType", 3u32, "Key"),
                Self::UnknownValue(s) => serializer.serialize_str(s.as_str()),
            }
        }
    }
}