module Dry::Initializer::Dispatchers::PrepareReader

def call(target: nil, reader: :public, **options)

def call(target: nil, reader: :public, **options)
  reader = case reader.to_s
           when "false", ""                      then nil
           when "true"                           then :public
           when "public", "private", "protected" then reader.to_sym
           else invalid_reader!(target, reader)
           end
  {target:, reader:, **options}
end

def invalid_reader!(target, _reader)

def invalid_reader!(target, _reader)
  raise ArgumentError, <<~MESSAGE
    Invalid setting for the ##{target} reader's privacy.
    Use the one of the following values for the `:reader` option:
    - 'public' (true) for the public reader (default)
    - 'private' for the private reader
    - 'protected' for the protected reader
    - nil (false) if no reader should be defined
  MESSAGE
end