module T::Props::Utils
def self.deep_clone_object(what, freeze: false)
Deep copy an object. The object must consist of Ruby primitive
def self.deep_clone_object(what, freeze: false) result = case what when true true when false false when Symbol, NilClass, Numeric what when Array what.map {|v| deep_clone_object(v, freeze: freeze)} when Hash h = what.class.new what.each do |k, v| k.freeze if freeze h[k] = deep_clone_object(v, freeze: freeze) end h when Regexp what.dup when T::Enum what else what.clone end freeze ? result.freeze : result end