# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::PrivateDns::Mgmt::V2018_09_01
  module Models
    #
    # Describes a DNS record set (a collection of DNS records with the same
    # name and type) in a Private DNS zone.
    #
    class RecordSet < ProxyResource

      include MsRestAzure

      # @return [String] The ETag of the record set.
      attr_accessor :etag

      # @return [Hash{String => String}] The metadata attached to the record
      # set.
      attr_accessor :metadata

      # @return [Integer] The TTL (time-to-live) of the records in the record
      # set.
      attr_accessor :ttl

      # @return [String] Fully qualified domain name of the record set.
      attr_accessor :fqdn

      # @return [Boolean] Is the record set auto-registered in the Private DNS
      # zone through a virtual network link?
      attr_accessor :is_auto_registered

      # @return [Array<ARecord>] The list of A records in the record set.
      attr_accessor :a_records

      # @return [Array<AaaaRecord>] The list of AAAA records in the record set.
      attr_accessor :aaaa_records

      # @return [CnameRecord] The CNAME record in the record set.
      attr_accessor :cname_record

      # @return [Array<MxRecord>] The list of MX records in the record set.
      attr_accessor :mx_records

      # @return [Array<PtrRecord>] The list of PTR records in the record set.
      attr_accessor :ptr_records

      # @return [SoaRecord] The SOA record in the record set.
      attr_accessor :soa_record

      # @return [Array<SrvRecord>] The list of SRV records in the record set.
      attr_accessor :srv_records

      # @return [Array<TxtRecord>] The list of TXT records in the record set.
      attr_accessor :txt_records


      #
      # Mapper for RecordSet class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'RecordSet',
          type: {
            name: 'Composite',
            class_name: 'RecordSet',
            model_properties: {
              id: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'id',
                type: {
                  name: 'String'
                }
              },
              name: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'name',
                type: {
                  name: 'String'
                }
              },
              type: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'type',
                type: {
                  name: 'String'
                }
              },
              etag: {
                client_side_validation: true,
                required: false,
                serialized_name: 'etag',
                type: {
                  name: 'String'
                }
              },
              metadata: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.metadata',
                type: {
                  name: 'Dictionary',
                  value: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'StringElementType',
                      type: {
                        name: 'String'
                      }
                  }
                }
              },
              ttl: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.ttl',
                type: {
                  name: 'Number'
                }
              },
              fqdn: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.fqdn',
                type: {
                  name: 'String'
                }
              },
              is_auto_registered: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.isAutoRegistered',
                type: {
                  name: 'Boolean'
                }
              },
              a_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.aRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'ARecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'ARecord'
                      }
                  }
                }
              },
              aaaa_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.aaaaRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'AaaaRecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'AaaaRecord'
                      }
                  }
                }
              },
              cname_record: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.cnameRecord',
                type: {
                  name: 'Composite',
                  class_name: 'CnameRecord'
                }
              },
              mx_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.mxRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'MxRecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'MxRecord'
                      }
                  }
                }
              },
              ptr_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.ptrRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'PtrRecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'PtrRecord'
                      }
                  }
                }
              },
              soa_record: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.soaRecord',
                type: {
                  name: 'Composite',
                  class_name: 'SoaRecord'
                }
              },
              srv_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.srvRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'SrvRecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'SrvRecord'
                      }
                  }
                }
              },
              txt_records: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.txtRecords',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'TxtRecordElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'TxtRecord'
                      }
                  }
                }
              }
            }
          }
        }
      end
    end
  end
end
