ExParamsSchema.Schema (ex_params_schema v0.1.0)

Copy Markdown View Source

正規化済みフィールド、JSON Schema、検証用データをまとめるコンパイル済みスキーマです。

ExParamsSchema.compile!/2 が生成します。構造体の内部表現と直接操作用の関数は将来変更する 可能性があるため、通常は ExParamsSchema の公開 API を使用してください。

Summary

Functions

コンパイル済みフィールドを実行時に再利用できるスキーマへコンパイルします。

JSON Pointer に対応する宣言順とエラー理由を返します。

コンパイル済みスキーマまたはコンパイル済みフィールドから JSON Schema Draft 7 を返します。 フィールド定義を渡した場合は、後方互換性のため Definition.compile_fields!/1 へ委譲します。

JSON Pointer に対応する宣言順、エラー理由、解決後のパスを返します。

変換済みの値を JSON Schema が検証できる値へ変換します。

Types

error_definition()

@type error_definition() ::
  {pattern :: ExParamsSchema.Schema.JsonPointer.pattern(),
   error_reason :: ExParamsSchema.error_reason(), order :: non_neg_integer()}

error_reference()

@type error_reference() ::
  {order :: non_neg_integer(), error_reason :: ExParamsSchema.error_reason()}

resolved_error_path()

@type resolved_error_path() ::
  {order :: non_neg_integer(), error_reason :: ExParamsSchema.error_reason(),
   path :: ExParamsSchema.Schema.JsonPointer.resolved_path()}

t()

@type t() :: %ExParamsSchema.Schema{
  errors: [error_definition()],
  fields: [ExParamsSchema.Definition.Field.t()],
  json_schema: map(),
  resolved: ExJsonSchema.Schema.Root.t(),
  strict: boolean()
}

Functions

compile!(fields, strict \\ false)

@spec compile!(
  [ExParamsSchema.field()] | [ExParamsSchema.Definition.Field.t()],
  boolean()
) :: t()

コンパイル済みフィールドを実行時に再利用できるスキーマへコンパイルします。

フィールド定義の検証とコンパイルは ExParamsSchema.Definition が担います。通常は map 形式の定義を受け付ける ExParamsSchema.compile!/2 を使用してください。 後方互換性のためフィールド定義も受け付けますが、Definition.compile_fields!/1 へ委譲します。

iex> fields = ExParamsSchema.Definition.compile_fields!([{:count, :integer, [minimum: 1]}])
iex> schema = ExParamsSchema.Schema.compile!(fields)
iex> schema.strict
false
iex> get_in(schema.json_schema, ["properties", "count"])
%{"minimum" => 1, "type" => "integer"}

error_for_path(schema, path)

This function is deprecated. 解決後のパスも必要なため resolve_error_path/2 を使用してください.
@spec error_for_path(t(), String.t()) :: error_reference() | nil

JSON Pointer に対応する宣言順とエラー理由を返します。

json_schema(fields, strict \\ nil)

@spec json_schema(t(), boolean() | nil) :: map()
@spec json_schema(
  [ExParamsSchema.field()] | [ExParamsSchema.Definition.Field.t()],
  boolean() | nil
) ::
  map()

コンパイル済みスキーマまたはコンパイル済みフィールドから JSON Schema Draft 7 を返します。 フィールド定義を渡した場合は、後方互換性のため Definition.compile_fields!/1 へ委譲します。

コンパイル済みスキーマに strict を指定した場合は、その指定に合わせて JSON Schema を 再生成します。指定を省略した場合は、コンパイル時に生成した JSON Schema を返します。

iex> fields = ExParamsSchema.Definition.compile_fields!([{:name, :string, []}])
iex> ExParamsSchema.Schema.json_schema(fields)["required"]
["name"]

resolve_error_path(schema, pointer)

@spec resolve_error_path(t(), String.t()) :: resolved_error_path() | nil

JSON Pointer に対応する宣言順、エラー理由、解決後のパスを返します。

validation_data(schema, parsed)

@spec validation_data(t(), map()) :: map()

変換済みの値を JSON Schema が検証できる値へ変換します。

iex> fields = ExParamsSchema.Definition.compile_fields!([{:published_on, :date, []}])
iex> schema = ExParamsSchema.Schema.compile!(fields)
iex> ExParamsSchema.Schema.validation_data(schema, %{published_on: ~D[2026-07-23]})
%{"published_on" => "2026-07-23"}