surgeventures/surgex

View on GitHub
lib/surgex/parser/parsers/page_parser.ex

Summary

Maintainability
Test Coverage
defmodule Surgex.Parser.PageParser do
  @moduledoc false

  alias Surgex.Parser.IntegerParser

  @spec call(term()) :: {:ok, integer | nil} | {:error, :invalid_page | IntegerParser.errors()}
  def call(nil), do: {:ok, nil}
  def call(""), do: {:ok, nil}

  def call(input) when is_binary(input) do
    case IntegerParser.call(input) do
      {:ok, integer} when integer > 0 -> {:ok, integer}
      {:ok, _invalid_integer} -> {:error, :invalid_page}
      {:error, reason} -> {:error, reason}
    end
  end

  def call(_input), do: {:error, :invalid_page}
end