Packages

Minimal wrapper around Rust NIFs for fast RSS and Atom feed parsing.

Current section

Files

Jump to
fast_syndication lib fast_syndication.ex
Raw

lib/fast_syndication.ex

defmodule FastSyndication do
@moduledoc """
Minimal wrapper around Rust NIFs for fast RSS and Atom feed parsing.
"""
defmodule Native do
@moduledoc false
use Rustler, otp_app: :fast_syndication, crate: "fastsyndication"
def parse_atom(_a), do: :erlang.nif_error(:nif_not_loaded)
def parse_rss(_a), do: :erlang.nif_error(:nif_not_loaded)
end
@doc ~S"""
Parse an atom string into a map.
"""
def parse_atom(atom_string) when is_binary(atom_string) do
atom_string
|> Native.parse_atom()
|> map_to_tuple()
end
def parse_atom(""), do: {:error, "Cannot parse blank string"}
def parse_atom(_somethig_else), do: {:error, "RSS feed must be passed in as a string"}
@doc ~S"""
Parse an rss string into a map
"""
def parse_rss(rss_string) when is_binary(rss_string) do
rss_string
|> Native.parse_rss()
|> map_to_tuple()
end
def parse_rss(""), do: {:error, "Cannot parse blank string"}
def parse_rss(_somethig_else), do: {:error, "RSS feed must be passed in as a string"}
defp map_to_tuple(%{"Ok" => map}), do: {:ok, map}
defp map_to_tuple({:ok, map}), do: {:ok, map}
defp map_to_tuple(%{"Err" => msg}), do: {:error, msg}
defp map_to_tuple({:error, msg}), do: {:error, msg}
end