class T::ImmutableStruct
def self.inherited(subclass)
def self.inherited(subclass) super(subclass) T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited, true) do |s| super(s) raise "#{self.name} is a subclass of T::ImmutableStruct and cannot be subclassed" end end
def self.prop(name, cls, **rules)
def self.prop(name, cls, **rules) return super if (cls.is_a?(Hash) && cls[:immutable]) || rules[:immutable] raise "Cannot use `prop` in #{self.name} because it is an immutable struct. Use `const` instead" end
def initialize(hash={})
def initialize(hash={}) super freeze end
def with(changed_props)
def with(changed_props) raise "Cannot use `with` in #{self.class.name} because it is an immutable struct" end