lib/ittybit/tasks/types/tasks_create_response.rb



# frozen_string_literal: true

require_relative "tasks_create_response_kind"
require_relative "tasks_create_response_status"
require "date"
require_relative "tasks_create_response_results"
require "ostruct"
require "json"

module Ittybit
  class Tasks
    class TasksCreateResponse
      # @return [String]
      attr_reader :id
      # @return [String]
      attr_reader :object
      # @return [Ittybit::Tasks::TasksCreateResponseKind]
      attr_reader :kind
      # @return [Hash{String => Object}]
      attr_reader :input
      # @return [Hash{String => Object}]
      attr_reader :options
      # @return [Hash{String => Object}]
      attr_reader :output
      # @return [Ittybit::Tasks::TasksCreateResponseStatus]
      attr_reader :status
      # @return [Integer]
      attr_reader :progress
      # @return [String]
      attr_reader :error
      # @return [String]
      attr_reader :created_by
      # @return [DateTime]
      attr_reader :created
      # @return [DateTime]
      attr_reader :updated
      # @return [String]
      attr_reader :parent_id
      # @return [Array<Object>]
      attr_reader :workflow
      # @return [Ittybit::Tasks::TasksCreateResponseResults]
      attr_reader :results
      # @return [OpenStruct] Additional properties unmapped to the current class definition
      attr_reader :additional_properties
      # @return [Object]
      attr_reader :_field_set
      protected :_field_set

      OMIT = Object.new

      # @param id [String]
      # @param object [String]
      # @param kind [Ittybit::Tasks::TasksCreateResponseKind]
      # @param input [Hash{String => Object}]
      # @param options [Hash{String => Object}]
      # @param output [Hash{String => Object}]
      # @param status [Ittybit::Tasks::TasksCreateResponseStatus]
      # @param progress [Integer]
      # @param error [String]
      # @param created_by [String]
      # @param created [DateTime]
      # @param updated [DateTime]
      # @param parent_id [String]
      # @param workflow [Array<Object>]
      # @param results [Ittybit::Tasks::TasksCreateResponseResults]
      # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition
      # @return [Ittybit::Tasks::TasksCreateResponse]
      def initialize(id:, object:, kind:, status:, created:, updated:, input: OMIT, options: OMIT, output: OMIT, progress: OMIT,
                     error: OMIT, created_by: OMIT, parent_id: OMIT, workflow: OMIT, results: OMIT, additional_properties: nil)
        @id = id
        @object = object
        @kind = kind
        @input = input if input != OMIT
        @options = options if options != OMIT
        @output = output if output != OMIT
        @status = status
        @progress = progress if progress != OMIT
        @error = error if error != OMIT
        @created_by = created_by if created_by != OMIT
        @created = created
        @updated = updated
        @parent_id = parent_id if parent_id != OMIT
        @workflow = workflow if workflow != OMIT
        @results = results if results != OMIT
        @additional_properties = additional_properties
        @_field_set = {
          "id": id,
          "object": object,
          "kind": kind,
          "input": input,
          "options": options,
          "output": output,
          "status": status,
          "progress": progress,
          "error": error,
          "created_by": created_by,
          "created": created,
          "updated": updated,
          "parent_id": parent_id,
          "workflow": workflow,
          "results": results
        }.reject do |_k, v|
          v == OMIT
        end
      end

      # Deserialize a JSON object to an instance of TasksCreateResponse
      #
      # @param json_object [String]
      # @return [Ittybit::Tasks::TasksCreateResponse]
      def self.from_json(json_object:)
        struct = JSON.parse(json_object, object_class: OpenStruct)
        parsed_json = JSON.parse(json_object)
        id = parsed_json["id"]
        object = parsed_json["object"]
        kind = parsed_json["kind"]
        input = parsed_json["input"]
        options = parsed_json["options"]
        output = parsed_json["output"]
        status = parsed_json["status"]
        progress = parsed_json["progress"]
        error = parsed_json["error"]
        created_by = parsed_json["created_by"]
        created = (DateTime.parse(parsed_json["created"]) unless parsed_json["created"].nil?)
        updated = (DateTime.parse(parsed_json["updated"]) unless parsed_json["updated"].nil?)
        parent_id = parsed_json["parent_id"]
        workflow = parsed_json["workflow"]
        if parsed_json["results"].nil?
          results = nil
        else
          results = parsed_json["results"].to_json
          results = Ittybit::Tasks::TasksCreateResponseResults.from_json(json_object: results)
        end
        new(
          id: id,
          object: object,
          kind: kind,
          input: input,
          options: options,
          output: output,
          status: status,
          progress: progress,
          error: error,
          created_by: created_by,
          created: created,
          updated: updated,
          parent_id: parent_id,
          workflow: workflow,
          results: results,
          additional_properties: struct
        )
      end

      # Serialize an instance of TasksCreateResponse to a JSON object
      #
      # @return [String]
      def to_json(*_args)
        @_field_set&.to_json
      end

      # Leveraged for Union-type generation, validate_raw attempts to parse the given
      #  hash and check each fields type against the current object's property
      #  definitions.
      #
      # @param obj [Object]
      # @return [Void]
      def self.validate_raw(obj:)
        obj.id.is_a?(String) != false || raise("Passed value for field obj.id is not the expected type, validation failed.")
        obj.object.is_a?(String) != false || raise("Passed value for field obj.object is not the expected type, validation failed.")
        obj.kind.is_a?(Ittybit::Tasks::TasksCreateResponseKind) != false || raise("Passed value for field obj.kind is not the expected type, validation failed.")
        obj.input&.is_a?(Hash) != false || raise("Passed value for field obj.input is not the expected type, validation failed.")
        obj.options&.is_a?(Hash) != false || raise("Passed value for field obj.options is not the expected type, validation failed.")
        obj.output&.is_a?(Hash) != false || raise("Passed value for field obj.output is not the expected type, validation failed.")
        obj.status.is_a?(Ittybit::Tasks::TasksCreateResponseStatus) != false || raise("Passed value for field obj.status is not the expected type, validation failed.")
        obj.progress&.is_a?(Integer) != false || raise("Passed value for field obj.progress is not the expected type, validation failed.")
        obj.error&.is_a?(String) != false || raise("Passed value for field obj.error is not the expected type, validation failed.")
        obj.created_by&.is_a?(String) != false || raise("Passed value for field obj.created_by is not the expected type, validation failed.")
        obj.created.is_a?(DateTime) != false || raise("Passed value for field obj.created is not the expected type, validation failed.")
        obj.updated.is_a?(DateTime) != false || raise("Passed value for field obj.updated is not the expected type, validation failed.")
        obj.parent_id&.is_a?(String) != false || raise("Passed value for field obj.parent_id is not the expected type, validation failed.")
        obj.workflow&.is_a?(Array) != false || raise("Passed value for field obj.workflow is not the expected type, validation failed.")
        obj.results.nil? || Ittybit::Tasks::TasksCreateResponseResults.validate_raw(obj: obj.results)
      end
    end
  end
end