module Lutaml::Model::Type

def cast(value, type)

def cast(value, type)
  return nil if value.nil?
  lookup(type).cast(value)
end

def lookup(type_name)

def lookup(type_name)
  return type_name if type_name.is_a?(Class)
  @registry ||= {}
  klass = @registry[type_name.to_sym]
  raise UnknownTypeError.new(type_name) unless klass
  klass
end

def register(type_name, type_class)

def register(type_name, type_class)
  unless type_class < Value
    raise TypeError,
          "class '#{type_class}' is not a valid Lutaml::Model::Type::Value"
  end
  @registry ||= {}
  @registry[type_name.to_sym] = type_class
end

def register_builtin_types

def register_builtin_types
  TYPE_CODES.each do |type_name, type_class|
    register(type_name, const_get(type_class))
  end
end

def serialize(value, type)

def serialize(value, type)
  return nil if value.nil?
  lookup(type).serialize(value)
end