A2UI.DataModel.JsonPointer (A2UI v0.3.0)

Copy Markdown View Source

RFC 6901 JSON Pointer implementation.

Parses JSON Pointer strings into token lists and vice versa, handling ~0 (tilde) and ~1 (slash) escaping.

Summary

Functions

Escapes a reference token for use in a JSON Pointer string. ~ becomes ~0, / becomes ~1.

Parses a JSON Pointer string into a list of reference tokens.

Converts a list of reference tokens back to a JSON Pointer string.

Unescapes a JSON Pointer reference token. ~1 becomes /, ~0 becomes ~. Order matters: ~1 must be processed before ~0.

Functions

escape(token)

@spec escape(String.t()) :: String.t()

Escapes a reference token for use in a JSON Pointer string. ~ becomes ~0, / becomes ~1.

parse(arg1)

@spec parse(String.t()) :: {:ok, [String.t()]} | {:error, String.t()}

Parses a JSON Pointer string into a list of reference tokens.

Examples

iex> A2UI.DataModel.JsonPointer.parse("")
{:ok, []}

iex> A2UI.DataModel.JsonPointer.parse("/")
{:ok, [""]}

iex> A2UI.DataModel.JsonPointer.parse("/foo/bar/0")
{:ok, ["foo", "bar", "0"]}

iex> A2UI.DataModel.JsonPointer.parse("/a~1b/c~0d")
{:ok, ["a/b", "c~d"]}

to_string(tokens)

@spec to_string([String.t()]) :: String.t()

Converts a list of reference tokens back to a JSON Pointer string.

Examples

iex> A2UI.DataModel.JsonPointer.to_string([])
""

iex> A2UI.DataModel.JsonPointer.to_string(["foo", "bar"])
"/foo/bar"

iex> A2UI.DataModel.JsonPointer.to_string(["a/b", "c~d"])
"/a~1b/c~0d"

unescape(token)

@spec unescape(String.t()) :: String.t()

Unescapes a JSON Pointer reference token. ~1 becomes /, ~0 becomes ~. Order matters: ~1 must be processed before ~0.