module T::Props::CustomType
def self.checked_serialize(instance)
def self.checked_serialize(instance) val = T.cast(instance.class, T::Props::CustomType).serialize(instance) unless valid_serialization?(val) msg = "#{instance.class} did not serialize to a valid scalar type. It became a: #{val.class}" if val.is_a?(Hash) msg += "\nIf you want to store a structured Hash, consider using a T::Struct as your type." end raise TypeError.new(msg) end val end
def self.included(_base)
def self.included(_base) super raise 'Please use "extend", not "include" to attach this module' end
def self.scalar_type?(val)
def self.scalar_type?(val) # We don't need to check for val's included modules in # T::Configuration.scalar_types, because T::Configuration.scalar_types # are all classes. klass = T.let(val.class, T.nilable(Class)) until klass.nil? return true if T::Configuration.scalar_types.include?(klass.to_s) klass = klass.superclass end false end
def self.valid_serialization?(val)
def self.valid_serialization?(val) case val when Array val.each do |v| return false unless scalar_type?(v) end true else scalar_type?(val) end end
def deserialize(scalar); end
def deserialize(scalar); end
def instance?(value)
def instance?(value) self.===(value) end
def serialize(instance); end
def serialize(instance); end
def valid?(value)
def valid?(value) instance?(value) end