ExParamsSchema.Schema.JsonPointer (ex_params_schema v0.1.0)

Copy Markdown View Source

JSON Pointer とフィールドパスを変換・照合する純粋関数を提供します。

JSON Schema の検証エラーは JSON Pointer、アプリケーション側は文字列キーと list 添字から なるパスを使うため、このモジュールで変換規則を一元化します。

Summary

Functions

JSON Pointer を未解決のセグメント列へ変換します。

JSON Pointer のセグメントを RFC 6901 の形式へエスケープします。

定義パターンがパスの先頭に一致するとき、解決後のパスを返します。

JSON Pointer を文字列キーと list 添字のパスへ変換します。

JSON Pointer のパスを、list の添字を整数へ変換したパスにします。

Types

pattern()

@type pattern() :: [pattern_segment()]

pattern_segment()

@type pattern_segment() :: String.t() | :index

pointer_path()

@type pointer_path() :: [segment()]

resolved_path()

@type resolved_path() :: [resolved_segment()]

resolved_segment()

@type resolved_segment() :: String.t() | non_neg_integer()

segment()

@type segment() :: String.t()

Functions

decode(arg1)

@spec decode(String.t()) :: {:ok, pointer_path()} | :error

JSON Pointer を未解決のセグメント列へ変換します。

iex> ExParamsSchema.Schema.JsonPointer.decode("#/a~1b~0c/0")
{:ok, ["a/b~c", "0"]}

escape_segment(segment)

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

JSON Pointer のセグメントを RFC 6901 の形式へエスケープします。

match(pattern, path)

@spec match(pattern(), pointer_path()) :: {:ok, resolved_path()} | :error

定義パターンがパスの先頭に一致するとき、解決後のパスを返します。

:index は 0 以上の整数のセグメントにのみ一致します。

parse(pointer)

@spec parse(String.t()) :: resolved_path()

JSON Pointer を文字列キーと list 添字のパスへ変換します。

iex> ExParamsSchema.Schema.JsonPointer.parse("#/entries/0/value")
["entries", 0, "value"]

# はルートを表します。不正な Pointer は空のパスとして扱います。

resolve_segments(path)

@spec resolve_segments(pointer_path()) :: resolved_path()

JSON Pointer のパスを、list の添字を整数へ変換したパスにします。