URL parser for non-HTTP URLs

ex_url parses URLs like URI but it adds parsing of non-HTTP URL’s and parsing for URL parameters.

It currently knows how to parse tel:, uuid:, urn:, mailto:, data: and geo: URIs.

Examples

# Parse a geo: URI
iex> URL.parse("geo:48.198634,-16.371648,3.4;crs=wgs84;u=40.0")
%URL{
  authority: nil,
  ...
  parsed_path: %URL.Geo{
    alt: 3.4,
    lat: 48.198634,
    lng: -16.371648,
    params: %{"crs" => "wgs84", "u" => 40.0}
  },
  path: "48.198634,-16.371648,3.4;crs=wgs84;u=40.0",
  port: nil,
  ...
  }

# Parse a mailto: URI
iex> mailto = URI.parse("mailto:user@%E7%B4%8D%E8%B1%86.example.org?subject=Test&body=NATTO")
iex> URL.Mailto.parse(mailto)
%URL.Mailto{
  params: %{"body" => "NATTO", "subject" => "Test"},
  to: ["user@納豆.example.org"]
}

# Parse a data: URI
iex> data = URI.parse "data:text/plain;base64,SGVsbG8gV29ybGQh"
iex> URL.Data.parse(data)
%URL.Data{
  data: "Hello World!",
  mediatype: "text/plain",
  params: %{"encoding" => "base64"}
}

# Parse a tel: URI
iex> tel = URI.parse "tel:+61-0407-555-987"
iex> URL.Tel.parse(tel)
%URL.Tel{params: %{}, tel: "+61 407 555 987"}
4 Likes