def call(user:, password:, current_user: nil)
      set_ivars(user, password, current_user)
      validate_call_params
      Success(user: user)
    rescue LogicError => error
      Failure(code: error.message.to_sym)
    end
def call(user:, password:, current_user: nil)
      set_ivars(user, password, current_user)
      validate_call_params
      Success(user: user)
    rescue LogicError => error
      Failure(code: error.message.to_sym)
    end
As a reminder, calling `Failure` *does not* interrupt control flow *or*
 prevent a future `Success` call from overriding the result. This is one
 case where raising *and catching* an exception is Useful