class T::Props::Private::ApplyDefaultFactory

def default

def default
  @class.class_exec(&@factory)
end

def initialize(cls, factory, accessor_key, setter_proc)

def initialize(cls, factory, accessor_key, setter_proc)
  @class = T.let(cls, Module)
  @factory = T.let(factory, T.any(Proc, Method))
  super(accessor_key, setter_proc)
end

def set_default(instance)

def set_default(instance)
  # Use the actual setter to validate the factory returns a legitimate
  # value every time
  instance.instance_exec(default, &@setter_proc)
end