lib/lutaml/model/type/date_time.rb



require "date"

module Lutaml
  module Model
    module Type
      # Date and time representation
      class DateTime < Value
        def self.cast(value)
          return nil if value.nil?

          case value
          when ::DateTime then value
          when ::Time then value.to_datetime
          else ::DateTime.parse(value.to_s)
          end
        rescue ArgumentError
          nil
        end

        def self.serialize(value)
          return nil if value.nil?

          cast(value)&.iso8601
        end

        # xs:dateTime format (ISO8601 with timezone)
        def to_xml
          value&.iso8601
        end

        # RFC3339 (ISO8601 with timezone)
        def to_json(*_args)
          value&.iso8601
        end

        # YAML timestamp format (native)
        def to_yaml
          value&.iso8601
        end

        # TOML datetime format (RFC3339)
        def to_toml
          value&.iso8601
        end
      end
    end
  end
end