Packages

Eml makes markup a first class citizen in Elixir. It provides a flexible and modular toolkit for generating, parsing and manipulating markup. It's main focus is html, but other markup languages could be implemented as well.

Current section

Files

Jump to
eml lib eml parsable.ex
Raw

lib/eml/parsable.ex

defprotocol Eml.Parsable do
@moduledoc """
The Eml Parsable protocol.
This protocol is used by `Eml.parse/2` function to
parse and convert different Elixir data types.
"""
def parse(data, lang)
end
defimpl Eml.Parsable, for: BitString do
def parse(data, lang), do: lang.parse(data, BitString)
end
defimpl Eml.Parsable, for: Integer do
def parse(data, lang), do: lang.parse(data, Integer)
end
defimpl Eml.Parsable, for: Float do
def parse(data, lang), do: lang.parse(data, Float)
end
defimpl Eml.Parsable, for: Tuple do
def parse(data, _lang), do: { :error, "Unparsable data: #{inspect data}" }
end
defimpl Eml.Parsable, for: Atom do
def parse(nil, _lang), do: nil
def parse(true, lang), do: lang.parse(true, Atom)
def parse(false, lang), do: lang.parse(false, Atom)
def parse(param, _lang), do: %Eml.Parameter{id: param}
end
defimpl Eml.Parsable, for: [Eml.Element, Eml.Parameter, Eml.Template] do
def parse(data, _lang), do: data
end
defimpl Eml.Parsable, for: [Function, PID, Port, Reference, List, Map] do
def parse(data, _lang), do: { :error, "Unparsable data: #{inspect data}" }
end