# This file was generated by the Julia Swagger Code Generator
# Do not modify this file directly. Modify the swagger specification instead.



mutable struct StorageAccountProperties <: SwaggerModel
    provisioningState::Any # spec type: Union{ Nothing, String } # spec name: provisioningState
    primaryEndpoints::Any # spec type: Union{ Nothing, Endpoints } # spec name: primaryEndpoints
    primaryLocation::Any # spec type: Union{ Nothing, String } # spec name: primaryLocation
    statusOfPrimary::Any # spec type: Union{ Nothing, String } # spec name: statusOfPrimary
    lastGeoFailoverTime::Any # spec type: Union{ Nothing, DateTime } # spec name: lastGeoFailoverTime
    secondaryLocation::Any # spec type: Union{ Nothing, String } # spec name: secondaryLocation
    statusOfSecondary::Any # spec type: Union{ Nothing, String } # spec name: statusOfSecondary
    creationTime::Any # spec type: Union{ Nothing, DateTime } # spec name: creationTime
    customDomain::Any # spec type: Union{ Nothing, CustomDomain } # spec name: customDomain
    secondaryEndpoints::Any # spec type: Union{ Nothing, Endpoints } # spec name: secondaryEndpoints
    encryption::Any # spec type: Union{ Nothing, Encryption } # spec name: encryption
    accessTier::Any # spec type: Union{ Nothing, String } # spec name: accessTier
    supportsHttpsTrafficOnly::Any # spec type: Union{ Nothing, Bool } # spec name: supportsHttpsTrafficOnly
    networkAcls::Any # spec type: Union{ Nothing, NetworkRuleSet } # spec name: networkAcls

    function StorageAccountProperties(;provisioningState=nothing, primaryEndpoints=nothing, primaryLocation=nothing, statusOfPrimary=nothing, lastGeoFailoverTime=nothing, secondaryLocation=nothing, statusOfSecondary=nothing, creationTime=nothing, customDomain=nothing, secondaryEndpoints=nothing, encryption=nothing, accessTier=nothing, supportsHttpsTrafficOnly=false, networkAcls=nothing)
        o = new()
        validate_property(StorageAccountProperties, Symbol("provisioningState"), provisioningState)
        setfield!(o, Symbol("provisioningState"), provisioningState)
        validate_property(StorageAccountProperties, Symbol("primaryEndpoints"), primaryEndpoints)
        setfield!(o, Symbol("primaryEndpoints"), primaryEndpoints)
        validate_property(StorageAccountProperties, Symbol("primaryLocation"), primaryLocation)
        setfield!(o, Symbol("primaryLocation"), primaryLocation)
        validate_property(StorageAccountProperties, Symbol("statusOfPrimary"), statusOfPrimary)
        setfield!(o, Symbol("statusOfPrimary"), statusOfPrimary)
        validate_property(StorageAccountProperties, Symbol("lastGeoFailoverTime"), lastGeoFailoverTime)
        setfield!(o, Symbol("lastGeoFailoverTime"), lastGeoFailoverTime)
        validate_property(StorageAccountProperties, Symbol("secondaryLocation"), secondaryLocation)
        setfield!(o, Symbol("secondaryLocation"), secondaryLocation)
        validate_property(StorageAccountProperties, Symbol("statusOfSecondary"), statusOfSecondary)
        setfield!(o, Symbol("statusOfSecondary"), statusOfSecondary)
        validate_property(StorageAccountProperties, Symbol("creationTime"), creationTime)
        setfield!(o, Symbol("creationTime"), creationTime)
        validate_property(StorageAccountProperties, Symbol("customDomain"), customDomain)
        setfield!(o, Symbol("customDomain"), customDomain)
        validate_property(StorageAccountProperties, Symbol("secondaryEndpoints"), secondaryEndpoints)
        setfield!(o, Symbol("secondaryEndpoints"), secondaryEndpoints)
        validate_property(StorageAccountProperties, Symbol("encryption"), encryption)
        setfield!(o, Symbol("encryption"), encryption)
        validate_property(StorageAccountProperties, Symbol("accessTier"), accessTier)
        setfield!(o, Symbol("accessTier"), accessTier)
        validate_property(StorageAccountProperties, Symbol("supportsHttpsTrafficOnly"), supportsHttpsTrafficOnly)
        setfield!(o, Symbol("supportsHttpsTrafficOnly"), supportsHttpsTrafficOnly)
        validate_property(StorageAccountProperties, Symbol("networkAcls"), networkAcls)
        setfield!(o, Symbol("networkAcls"), networkAcls)
        o
    end
end # type StorageAccountProperties

const _property_map_StorageAccountProperties = Dict{Symbol,Symbol}(Symbol("provisioningState")=>Symbol("provisioningState"), Symbol("primaryEndpoints")=>Symbol("primaryEndpoints"), Symbol("primaryLocation")=>Symbol("primaryLocation"), Symbol("statusOfPrimary")=>Symbol("statusOfPrimary"), Symbol("lastGeoFailoverTime")=>Symbol("lastGeoFailoverTime"), Symbol("secondaryLocation")=>Symbol("secondaryLocation"), Symbol("statusOfSecondary")=>Symbol("statusOfSecondary"), Symbol("creationTime")=>Symbol("creationTime"), Symbol("customDomain")=>Symbol("customDomain"), Symbol("secondaryEndpoints")=>Symbol("secondaryEndpoints"), Symbol("encryption")=>Symbol("encryption"), Symbol("accessTier")=>Symbol("accessTier"), Symbol("supportsHttpsTrafficOnly")=>Symbol("supportsHttpsTrafficOnly"), Symbol("networkAcls")=>Symbol("networkAcls"))
const _property_types_StorageAccountProperties = Dict{Symbol,String}(Symbol("provisioningState")=>"String", Symbol("primaryEndpoints")=>"Endpoints", Symbol("primaryLocation")=>"String", Symbol("statusOfPrimary")=>"String", Symbol("lastGeoFailoverTime")=>"DateTime", Symbol("secondaryLocation")=>"String", Symbol("statusOfSecondary")=>"String", Symbol("creationTime")=>"DateTime", Symbol("customDomain")=>"CustomDomain", Symbol("secondaryEndpoints")=>"Endpoints", Symbol("encryption")=>"Encryption", Symbol("accessTier")=>"String", Symbol("supportsHttpsTrafficOnly")=>"Bool", Symbol("networkAcls")=>"NetworkRuleSet")
Base.propertynames(::Type{ StorageAccountProperties }) = collect(keys(_property_map_StorageAccountProperties))
Swagger.property_type(::Type{ StorageAccountProperties }, name::Symbol) = Union{Nothing,eval(Meta.parse(_property_types_StorageAccountProperties[name]))}
Swagger.field_name(::Type{ StorageAccountProperties }, property_name::Symbol) =  _property_map_StorageAccountProperties[property_name]

const _allowed_StorageAccountProperties_provisioningState = ["Creating", "ResolvingDNS", "Succeeded"]

const _allowed_StorageAccountProperties_statusOfPrimary = ["available", "unavailable"]

const _allowed_StorageAccountProperties_statusOfSecondary = ["available", "unavailable"]

const _allowed_StorageAccountProperties_accessTier = ["Hot", "Cool"]

function check_required(o::StorageAccountProperties)
    true
end

function validate_property(::Type{ StorageAccountProperties }, name::Symbol, val)
    if name === Symbol("provisioningState")
        Swagger.validate_param(name, "StorageAccountProperties", :enum, val, _allowed_StorageAccountProperties_provisioningState)
    end
    if name === Symbol("statusOfPrimary")
        Swagger.validate_param(name, "StorageAccountProperties", :enum, val, _allowed_StorageAccountProperties_statusOfPrimary)
    end
    if name === Symbol("statusOfSecondary")
        Swagger.validate_param(name, "StorageAccountProperties", :enum, val, _allowed_StorageAccountProperties_statusOfSecondary)
    end
    if name === Symbol("accessTier")
        Swagger.validate_param(name, "StorageAccountProperties", :enum, val, _allowed_StorageAccountProperties_accessTier)
    end
end
