module T::Props::Private::SetterFactory

def self.raise_pretty_error(klass, prop, type, val)

def self.raise_pretty_error(klass, prop, type, val)
  base_message = "Can't set #{klass.name}.#{prop} to #{val.inspect} (instance of #{val.class}) - need a #{type}"
  pretty_message = "Parameter '#{prop}': #{base_message}\n"
  caller_loc = caller_locations&.find {|l| !l.to_s.include?('sorbet-runtime/lib/types/props')}
  if caller_loc
    pretty_message += "Caller: #{caller_loc.path}:#{caller_loc.lineno}\n"
  end
  T::Configuration.call_validation_error_handler(
    nil,
    message: base_message,
    pretty_message: pretty_message,
    kind: 'Parameter',
    name: prop,
    type: type,
    value: val,
    location: caller_loc,
  )
end