mirror of
https://github.com/LukeHagar/plexruby.git
synced 2025-12-06 12:47:44 +00:00
82 lines
2.2 KiB
Ruby
82 lines
2.2 KiB
Ruby
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
|
|
# typed: true
|
|
# frozen_string_literal: true
|
|
|
|
require 'sorbet-runtime'
|
|
|
|
module Crystalline
|
|
extend T::Sig
|
|
|
|
class FieldAugmented
|
|
include MetadataFields
|
|
end
|
|
|
|
sig { params(complex: Object).returns(Object) }
|
|
def self.to_dict(complex)
|
|
if complex.is_a? Array
|
|
complex.map { |v| Crystalline.to_dict(v) }
|
|
elsif complex.is_a? Hash
|
|
complex.transform_values { |v| Crystalline.to_dict(v) }
|
|
elsif complex.is_a? Crystalline::FieldAugmented
|
|
complex.to_dict
|
|
else
|
|
val_to_string complex, primitives: false
|
|
end
|
|
end
|
|
|
|
def self.to_json(complex)
|
|
JSON.dump(to_dict(complex))
|
|
end
|
|
|
|
sig { params(data: Object, type: Object).returns(Object) }
|
|
def self.unmarshal_json(data, type)
|
|
if T.simplifiable? type
|
|
type = T.simplify_type type
|
|
end
|
|
if type.instance_of?(Class) && type < ::Crystalline::FieldAugmented
|
|
type.from_dict(data)
|
|
elsif T.arr? type
|
|
data.map { |v| Crystalline.unmarshal_json(v, T.arr_of(type)) }
|
|
elsif T.hash? type
|
|
data.transform_values { |v| Crystalline.unmarshal_json(v, T.hash_of(type)) }
|
|
else
|
|
data
|
|
end
|
|
end
|
|
|
|
sig { params(val: Object, primitives: T::Boolean).returns(Object) }
|
|
def self.val_to_string(val, primitives: true)
|
|
if val.is_a? T::Enum
|
|
val.serialize
|
|
elsif val.is_a? DateTime
|
|
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
|
|
elsif primitives
|
|
val.to_s
|
|
else
|
|
val
|
|
end
|
|
end
|
|
|
|
sig { params(klass: T.any(Class, T::Types::TypedArray, T::Types::TypedHash)).returns(Integer) }
|
|
def self.non_nilable_attr_count(klass)
|
|
# somewhat sane sort ordering for Union deserialization.
|
|
# All Crystalline objects return the number of non-nilable fields
|
|
# All non-string primitives return 2
|
|
# All arrays and hashes return 1
|
|
# Strings return 0 (since any data can deserialize to a string, it should be our last attempt)
|
|
if klass.respond_to? :fields
|
|
return -1 * klass.fields.count do |field|
|
|
!T.nilable? field.type
|
|
end
|
|
else
|
|
if klass == String
|
|
return 0
|
|
elsif klass.is_a?(T::Types::TypedArray) || klass.is_a?(T::Types::TypedHash)
|
|
return 1
|
|
end
|
|
return 2
|
|
end
|
|
end
|
|
end
|