lib/ittybit/media/types/media_create_response.rb



# frozen_string_literal: true

require_relative "media_create_response_kind"
require_relative "media_create_response_files_item"
require "date"
require "ostruct"
require "json"

module Ittybit
  class Media
    class MediaCreateResponse
      # @return [String]
      attr_reader :id
      # @return [String]
      attr_reader :object
      # @return [Ittybit::Media::MediaCreateResponseKind]
      attr_reader :kind
      # @return [String]
      attr_reader :title
      # @return [String]
      attr_reader :alt
      # @return [Integer]
      attr_reader :width
      # @return [Integer]
      attr_reader :height
      # @return [Float]
      attr_reader :duration
      # @return [Array<Ittybit::Media::MediaCreateResponseFilesItem>]
      attr_reader :files
      # @return [Hash{String => Object}]
      attr_reader :urls
      # @return [String]
      attr_reader :background
      # @return [Hash{String => Object}]
      attr_reader :metadata
      # @return [DateTime]
      attr_reader :created
      # @return [DateTime]
      attr_reader :updated
      # @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::Media::MediaCreateResponseKind]
      # @param title [String]
      # @param alt [String]
      # @param width [Integer]
      # @param height [Integer]
      # @param duration [Float]
      # @param files [Array<Ittybit::Media::MediaCreateResponseFilesItem>]
      # @param urls [Hash{String => Object}]
      # @param background [String]
      # @param metadata [Hash{String => Object}]
      # @param created [DateTime]
      # @param updated [DateTime]
      # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition
      # @return [Ittybit::Media::MediaCreateResponse]
      def initialize(id:, object:, files:, urls:, created:, updated:, kind: OMIT, title: OMIT, alt: OMIT, width: OMIT,
                     height: OMIT, duration: OMIT, background: OMIT, metadata: OMIT, additional_properties: nil)
        @id = id
        @object = object
        @kind = kind if kind != OMIT
        @title = title if title != OMIT
        @alt = alt if alt != OMIT
        @width = width if width != OMIT
        @height = height if height != OMIT
        @duration = duration if duration != OMIT
        @files = files
        @urls = urls
        @background = background if background != OMIT
        @metadata = metadata if metadata != OMIT
        @created = created
        @updated = updated
        @additional_properties = additional_properties
        @_field_set = {
          "id": id,
          "object": object,
          "kind": kind,
          "title": title,
          "alt": alt,
          "width": width,
          "height": height,
          "duration": duration,
          "files": files,
          "urls": urls,
          "background": background,
          "metadata": metadata,
          "created": created,
          "updated": updated
        }.reject do |_k, v|
          v == OMIT
        end
      end

      # Deserialize a JSON object to an instance of MediaCreateResponse
      #
      # @param json_object [String]
      # @return [Ittybit::Media::MediaCreateResponse]
      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"]
        title = parsed_json["title"]
        alt = parsed_json["alt"]
        width = parsed_json["width"]
        height = parsed_json["height"]
        duration = parsed_json["duration"]
        files = parsed_json["files"]&.map do |item|
          item = item.to_json
          Ittybit::Media::MediaCreateResponseFilesItem.from_json(json_object: item)
        end
        urls = parsed_json["urls"]
        background = parsed_json["background"]
        metadata = parsed_json["metadata"]
        created = (DateTime.parse(parsed_json["created"]) unless parsed_json["created"].nil?)
        updated = (DateTime.parse(parsed_json["updated"]) unless parsed_json["updated"].nil?)
        new(
          id: id,
          object: object,
          kind: kind,
          title: title,
          alt: alt,
          width: width,
          height: height,
          duration: duration,
          files: files,
          urls: urls,
          background: background,
          metadata: metadata,
          created: created,
          updated: updated,
          additional_properties: struct
        )
      end

      # Serialize an instance of MediaCreateResponse 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::Media::MediaCreateResponseKind) != false || raise("Passed value for field obj.kind is not the expected type, validation failed.")
        obj.title&.is_a?(String) != false || raise("Passed value for field obj.title is not the expected type, validation failed.")
        obj.alt&.is_a?(String) != false || raise("Passed value for field obj.alt is not the expected type, validation failed.")
        obj.width&.is_a?(Integer) != false || raise("Passed value for field obj.width is not the expected type, validation failed.")
        obj.height&.is_a?(Integer) != false || raise("Passed value for field obj.height is not the expected type, validation failed.")
        obj.duration&.is_a?(Float) != false || raise("Passed value for field obj.duration is not the expected type, validation failed.")
        obj.files.is_a?(Array) != false || raise("Passed value for field obj.files is not the expected type, validation failed.")
        obj.urls.is_a?(Hash) != false || raise("Passed value for field obj.urls is not the expected type, validation failed.")
        obj.background&.is_a?(String) != false || raise("Passed value for field obj.background is not the expected type, validation failed.")
        obj.metadata&.is_a?(Hash) != false || raise("Passed value for field obj.metadata 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.")
      end
    end
  end
end