# 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::CognitiveServices::LuisAuthoring::V3_0_preview
  module Models
    #
    # Exported Model - An exported LUIS Application.
    #
    class LuisApp

      include MsRestAzure

      # @return Unmatched properties from the message are deserialized this
      # collection
      attr_accessor :additional_properties

      # @return [String] The name of the application.
      attr_accessor :name

      # @return [String] The version ID of the application that was exported.
      attr_accessor :version_id

      # @return [String] The description of the application.
      attr_accessor :desc

      # @return [String] The culture of the application. E.g.: en-us.
      attr_accessor :culture

      # @return [Array<HierarchicalModel>] List of intents.
      attr_accessor :intents

      # @return [Array<HierarchicalModel>] List of entities.
      attr_accessor :entities

      # @return [Array<ClosedList>] List of list entities.
      attr_accessor :closed_lists

      # @return [Array<HierarchicalModel>] List of composite entities.
      attr_accessor :composites

      # @return [Array<HierarchicalModel>] List of hierarchical entities.
      attr_accessor :hierarchicals

      # @return [Array<PatternAny>] List of Pattern.Any entities.
      attr_accessor :pattern_any_entities

      # @return [Array<RegexEntity>] List of regular expression entities.
      attr_accessor :regex_entities

      # @return [Array<PrebuiltEntity>] List of prebuilt entities.
      attr_accessor :prebuilt_entities

      # @return [Array<JSONRegexFeature>] List of pattern features.
      attr_accessor :regex_features

      # @return [Array<JSONModelFeature>] List of model features.
      attr_accessor :phraselists

      # @return [Array<PatternRule>] List of patterns.
      attr_accessor :patterns

      # @return [Array<JSONUtterance>] List of example utterances.
      attr_accessor :utterances


      #
      # Mapper for LuisApp class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'LuisApp',
          type: {
            name: 'Composite',
            class_name: 'LuisApp',
            model_properties: {
              additional_properties: {
                client_side_validation: true,
                required: false,
                type: {
                  name: 'Dictionary',
                  value: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'ObjectElementType',
                      type: {
                        name: 'Object'
                      }
                  }
                }
              },
              name: {
                client_side_validation: true,
                required: false,
                serialized_name: 'name',
                type: {
                  name: 'String'
                }
              },
              version_id: {
                client_side_validation: true,
                required: false,
                serialized_name: 'versionId',
                type: {
                  name: 'String'
                }
              },
              desc: {
                client_side_validation: true,
                required: false,
                serialized_name: 'desc',
                type: {
                  name: 'String'
                }
              },
              culture: {
                client_side_validation: true,
                required: false,
                serialized_name: 'culture',
                type: {
                  name: 'String'
                }
              },
              intents: {
                client_side_validation: true,
                required: false,
                serialized_name: 'intents',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'HierarchicalModelElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'HierarchicalModel'
                      }
                  }
                }
              },
              entities: {
                client_side_validation: true,
                required: false,
                serialized_name: 'entities',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'HierarchicalModelElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'HierarchicalModel'
                      }
                  }
                }
              },
              closed_lists: {
                client_side_validation: true,
                required: false,
                serialized_name: 'closedLists',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'ClosedListElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'ClosedList'
                      }
                  }
                }
              },
              composites: {
                client_side_validation: true,
                required: false,
                serialized_name: 'composites',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'HierarchicalModelElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'HierarchicalModel'
                      }
                  }
                }
              },
              hierarchicals: {
                client_side_validation: true,
                required: false,
                serialized_name: 'hierarchicals',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'HierarchicalModelElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'HierarchicalModel'
                      }
                  }
                }
              },
              pattern_any_entities: {
                client_side_validation: true,
                required: false,
                serialized_name: 'patternAnyEntities',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'PatternAnyElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'PatternAny'
                      }
                  }
                }
              },
              regex_entities: {
                client_side_validation: true,
                required: false,
                serialized_name: 'regex_entities',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'RegexEntityElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'RegexEntity'
                      }
                  }
                }
              },
              prebuilt_entities: {
                client_side_validation: true,
                required: false,
                serialized_name: 'prebuiltEntities',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'PrebuiltEntityElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'PrebuiltEntity'
                      }
                  }
                }
              },
              regex_features: {
                client_side_validation: true,
                required: false,
                serialized_name: 'regex_features',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'JSONRegexFeatureElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'JSONRegexFeature'
                      }
                  }
                }
              },
              phraselists: {
                client_side_validation: true,
                required: false,
                serialized_name: 'phraselists',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'JSONModelFeatureElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'JSONModelFeature'
                      }
                  }
                }
              },
              patterns: {
                client_side_validation: true,
                required: false,
                serialized_name: 'patterns',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'PatternRuleElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'PatternRule'
                      }
                  }
                }
              },
              utterances: {
                client_side_validation: true,
                required: false,
                serialized_name: 'utterances',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'JSONUtteranceElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'JSONUtterance'
                      }
                  }
                }
              }
            }
          }
        }
      end
    end
  end
end
