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 else # Some unfortunate nastiness to get around Opus::Enum potentially not # being defined. if defined?(Opus) && defined?(Opus::Enum) && what.class == Opus::Enum what else what.clone end end freeze ? result.freeze : result end