Current section

Files

Jump to
ex_link_header lib ex_link_header.ex
Raw

lib/ex_link_header.ex

defmodule ExLinkHeader do
@moduledoc """
HTTP link header parser
"""
def parse("") do
%{}
end
def parse(nil) do
%{}
end
def parse(link_header) do
links = String.split(link_header, ", ")
parse_links(links)
end
defp parse_links(links) do
parsed_links = Enum.map(links, fn link ->
[_, url, name] = Regex.run(~r{<([^>]+)>; rel="?([a-z]+)"?}, link)
page = case Regex.run(~r{.+[\?|\&]page=(\d+)\??}, url) do
[_, page] -> page
nil -> nil
end
per_page = case Regex.run(~r{.+[\?|\&]per_page=(\d+)\??}, url) do
[_, per_page] -> per_page
nil -> nil
end
{name, %{ url: url, page: page, per_page: per_page }}
end)
parsed_links
|> Enum.into(%{})
end
end