defmodule SendGrid.MetaData do
@moduledoc """
Pagination Meta Details,
"""
defstruct [
self: nil,
next: nil,
count: nil,
options: nil,
]
@type t :: %SendGrid.MetaData{
self: String.t | nil,
next: String.t | nil,
count: integer,
options: SendGrid.query(),
}
@spec new(Map.t, SendGrid.query(), :json) :: SendGrid.MetaData.t | {:error, [String.t]} | {:error, String.t}
def new(json, options, :json) do
%__MODULE__{
count: json["count"],
self: extract_page_token(json["self"]),
next: extract_page_token(json["next"]),
options: options
}
end
defp extract_page_token(url) when is_bitstring(url) do
case Regex.run(~r/.*page_token=([^&]+)/, url) do
[_, m] -> m
_ -> nil
end
end
defp extract_page_token(_), do: nil
end