Packages

Generic Elixir models and portable validation for RelayMark documents and manifests

Current section

Files

Jump to
relay_mark_elixir lib relay_mark resource.ex
Raw

lib/relay_mark/resource.ex

defmodule RelayMark.Resource do
@moduledoc "RelayMark resource struct."
defstruct id: nil,
type: nil,
uri: nil,
label: nil,
scope: nil,
props: %{}
@type t :: %__MODULE__{
id: String.t(),
type: String.t(),
uri: String.t() | nil,
label: String.t() | nil,
scope: String.t() | nil,
props: map()
}
@spec from_map(map()) :: t()
def from_map(map) do
%__MODULE__{
id: Map.fetch!(map, "id"),
type: Map.fetch!(map, "type"),
uri: Map.get(map, "uri"),
label: Map.get(map, "label"),
scope: Map.get(map, "scope"),
props: Map.get(map, "props", %{})
}
end
@spec scripture_release(t()) :: {:ok, RelayMark.Scripture.Release.t()} | :error
def scripture_release(%__MODULE__{type: "scripture", props: props}) do
{:ok, RelayMark.Scripture.Release.from_map(props)}
end
def scripture_release(%__MODULE__{}), do: :error
end