Exdantic.Config.Builder (exdantic v0.0.2)
View SourceFluent builder for creating Exdantic configurations.
This module provides a chainable API for building complex configurations in a readable and intuitive way.
Summary
Functions
Convenience method to enable aggressive coercion.
Convenience method to allow extra fields.
Applies a preset configuration to the builder.
Builds the final configuration from the builder.
Convenience method to disable case sensitivity.
Sets case sensitivity for field names.
Clones a builder instance.
Sets the coercion strategy.
Sets a custom description generator function.
Convenience method to set detailed error format.
Sets the error format style.
Sets how extra fields should be handled.
Creates a configuration for API validation scenarios.
Creates a configuration for development scenarios.
Creates a configuration for JSON Schema generation scenarios.
Creates a configuration for production scenarios.
Convenience method to forbid extra fields.
Sets whether the configuration should be frozen (immutable).
Sets the maximum length for anyOf unions in JSON Schema.
Merges additional options into the builder.
Creates a new configuration builder.
Convenience method to disable coercion.
Resets the builder to an empty state.
Convenience method to enable safe coercion.
Convenience method to set simple error format.
Sets strict validation mode.
Returns a summary of the current builder configuration.
Sets a custom title generator function.
Sets whether to use enum values instead of names.
Validates the builder configuration before building.
Sets whether to validate field assignments.
Applies configuration only if a condition is false.
Conditionally applies a configuration based on a predicate.
Types
@type t() :: %Exdantic.Config.Builder{opts: map()}
Functions
Convenience method to enable aggressive coercion.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.aggressive_coercion()
%Exdantic.Config.Builder{opts: %{coercion: :aggressive}}
Convenience method to allow extra fields.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.allow_extra()
%Exdantic.Config.Builder{opts: %{extra: :allow}}
Applies a preset configuration to the builder.
Parameters
builder
- The builder instancepreset
- The preset name (same as Exdantic.Config.preset/1)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.apply_preset(:strict)
%Exdantic.Config.Builder{opts: %{strict: true, extra: :forbid, ...}}
@spec build(t()) :: Exdantic.Config.t()
Builds the final configuration from the builder.
Parameters
builder
- The builder instance
Returns
- Exdantic.Config struct with the configured options
Examples
iex> config = Exdantic.Config.Builder.new()
...> |> Exdantic.Config.Builder.strict()
...> |> Exdantic.Config.Builder.forbid_extra()
...> |> Exdantic.Config.Builder.build()
%Exdantic.Config{strict: true, extra: :forbid, ...}
Convenience method to disable case sensitivity.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.case_insensitive()
%Exdantic.Config.Builder{opts: %{case_sensitive: false}}
Sets case sensitivity for field names.
Parameters
builder
- The builder instanceenabled
- Whether to enable case sensitivity (default: true)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.case_sensitive()
%Exdantic.Config.Builder{opts: %{case_sensitive: true}}
iex> builder |> Exdantic.Config.Builder.case_sensitive(false)
%Exdantic.Config.Builder{opts: %{case_sensitive: false}}
Clones a builder instance.
Parameters
builder
- The builder instance to clone
Returns
- New builder instance with the same configuration
Examples
iex> original = Exdantic.Config.Builder.new() |> Exdantic.Config.Builder.strict()
iex> cloned = Exdantic.Config.Builder.clone(original)
%Exdantic.Config.Builder{opts: %{strict: true}}
@spec coercion(t(), Exdantic.Config.coercion_strategy()) :: t()
Sets the coercion strategy.
Parameters
builder
- The builder instancestrategy
- The coercion strategy (:none, :safe, :aggressive)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.coercion(:safe)
%Exdantic.Config.Builder{opts: %{coercion: :safe}}
Sets a custom description generator function.
Parameters
builder
- The builder instancegenerator_fn
- Function that takes a field name and returns a description
Returns
- Updated builder instance
Examples
iex> desc_fn = fn field -> "Field for " <> Atom.to_string(field) end
iex> builder |> Exdantic.Config.Builder.description_generator(desc_fn)
%Exdantic.Config.Builder{opts: %{description_generator: #Function<...>}}
Convenience method to set detailed error format.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.detailed_errors()
%Exdantic.Config.Builder{opts: %{error_format: :detailed}}
@spec error_format(t(), Exdantic.Config.error_format()) :: t()
Sets the error format style.
Parameters
builder
- The builder instanceformat
- The error format (:detailed, :simple, :minimal)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.error_format(:simple)
%Exdantic.Config.Builder{opts: %{error_format: :simple}}
@spec extra(t(), Exdantic.Config.extra_strategy()) :: t()
Sets how extra fields should be handled.
Parameters
builder
- The builder instancestrategy
- The extra field strategy (:allow, :forbid, :ignore)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.extra(:forbid)
%Exdantic.Config.Builder{opts: %{extra: :forbid}}
Creates a configuration for API validation scenarios.
Parameters
builder
- The builder instance
Returns
- Updated builder instance with API-friendly settings
Examples
iex> builder |> Exdantic.Config.Builder.for_api()
%Exdantic.Config.Builder{opts: %{strict: true, extra: :forbid, ...}}
Creates a configuration for development scenarios.
Parameters
builder
- The builder instance
Returns
- Updated builder instance with development-friendly settings
Examples
iex> builder |> Exdantic.Config.Builder.for_development()
%Exdantic.Config.Builder{opts: %{strict: false, coercion: :aggressive, ...}}
Creates a configuration for JSON Schema generation scenarios.
Parameters
builder
- The builder instance
Returns
- Updated builder instance with JSON Schema-friendly settings
Examples
iex> builder |> Exdantic.Config.Builder.for_json_schema()
%Exdantic.Config.Builder{opts: %{use_enum_values: true, error_format: :minimal, ...}}
Creates a configuration for production scenarios.
Parameters
builder
- The builder instance
Returns
- Updated builder instance with production-ready settings
Examples
iex> builder |> Exdantic.Config.Builder.for_production()
%Exdantic.Config.Builder{opts: %{strict: true, frozen: true, ...}}
Convenience method to forbid extra fields.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.forbid_extra()
%Exdantic.Config.Builder{opts: %{extra: :forbid}}
Sets whether the configuration should be frozen (immutable).
Parameters
builder
- The builder instanceenabled
- Whether to freeze the config (default: true)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.frozen()
%Exdantic.Config.Builder{opts: %{frozen: true}}
@spec max_union_length(t(), non_neg_integer()) :: t()
Sets the maximum length for anyOf unions in JSON Schema.
Parameters
builder
- The builder instancemax_length
- Maximum union length
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.max_union_length(3)
%Exdantic.Config.Builder{opts: %{max_anyof_union_len: 3}}
Merges additional options into the builder.
Parameters
builder
- The builder instanceopts
- Additional options to merge
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.merge(%{strict: true, frozen: true})
%Exdantic.Config.Builder{opts: %{strict: true, frozen: true}}
@spec new() :: %Exdantic.Config.Builder{opts: %{}}
Creates a new configuration builder.
Returns
- New ConfigBuilder instance
Examples
iex> builder = Exdantic.Config.Builder.new()
%Exdantic.Config.Builder{opts: %{}}
Convenience method to disable coercion.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.no_coercion()
%Exdantic.Config.Builder{opts: %{coercion: :none}}
Resets the builder to an empty state.
Parameters
builder
- The builder instance
Returns
- Reset builder instance
Examples
iex> builder = Exdantic.Config.Builder.new() |> Exdantic.Config.Builder.strict()
iex> reset_builder = Exdantic.Config.Builder.reset(builder)
%Exdantic.Config.Builder{opts: %{}}
Convenience method to enable safe coercion.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.safe_coercion()
%Exdantic.Config.Builder{opts: %{coercion: :safe}}
Convenience method to set simple error format.
Parameters
builder
- The builder instance
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.simple_errors()
%Exdantic.Config.Builder{opts: %{error_format: :simple}}
Sets strict validation mode.
Parameters
builder
- The builder instanceenabled
- Whether to enable strict mode (default: true)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.strict()
%Exdantic.Config.Builder{opts: %{strict: true}}
iex> builder |> Exdantic.Config.Builder.strict(false)
%Exdantic.Config.Builder{opts: %{strict: false}}
Returns a summary of the current builder configuration.
Parameters
builder
- The builder instance
Returns
- Map with current configuration options
Examples
iex> builder = Exdantic.Config.Builder.new() |> Exdantic.Config.Builder.strict()
iex> Exdantic.Config.Builder.summary(builder)
%{options_set: [:strict], option_count: 1, ready_to_build: true}
Sets a custom title generator function.
Parameters
builder
- The builder instancegenerator_fn
- Function that takes a field name and returns a title
Returns
- Updated builder instance
Examples
iex> title_fn = fn field -> field |> Atom.to_string() |> String.capitalize() end
iex> builder |> Exdantic.Config.Builder.title_generator(title_fn)
%Exdantic.Config.Builder{opts: %{title_generator: #Function<...>}}
Sets whether to use enum values instead of names.
Parameters
builder
- The builder instanceenabled
- Whether to use enum values (default: true)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.use_enum_values()
%Exdantic.Config.Builder{opts: %{use_enum_values: true}}
@spec validate_and_build(t()) :: {:ok, Exdantic.Config.t()} | {:error, [String.t()]}
Validates the builder configuration before building.
Parameters
builder
- The builder instance
Returns
{:ok, config}
if valid{:error, reasons}
if invalid
Examples
iex> valid_builder = Exdantic.Config.Builder.new() |> Exdantic.Config.Builder.strict()
iex> Exdantic.Config.Builder.validate_and_build(valid_builder)
{:ok, %Exdantic.Config{...}}
iex> invalid_builder = Exdantic.Config.Builder.new()
...> |> Exdantic.Config.Builder.strict()
...> |> Exdantic.Config.Builder.allow_extra()
iex> Exdantic.Config.Builder.validate_and_build(invalid_builder)
{:error, ["strict mode conflicts with extra: :allow"]}
Sets whether to validate field assignments.
Parameters
builder
- The builder instanceenabled
- Whether to enable assignment validation (default: true)
Returns
- Updated builder instance
Examples
iex> builder |> Exdantic.Config.Builder.validate_assignment()
%Exdantic.Config.Builder{opts: %{validate_assignment: true}}
Applies configuration only if a condition is false.
Parameters
builder
- The builder instancecondition
- Boolean condition or function that returns booleanconfig_fn
- Function to apply if condition is false
Returns
- Updated builder instance
Examples
iex> is_development = Application.get_env(:my_app, :env) == :dev
iex> builder |> Exdantic.Config.Builder.when_false(is_development, &Exdantic.Config.Builder.frozen/1)
%Exdantic.Config.Builder{...}
Conditionally applies a configuration based on a predicate.
Parameters
builder
- The builder instancecondition
- Boolean condition or function that returns booleanconfig_fn
- Function to apply if condition is true
Returns
- Updated builder instance
Examples
iex> is_production = Application.get_env(:my_app, :env) == :prod
iex> builder |> Exdantic.Config.Builder.when_true(is_production, &Exdantic.Config.Builder.frozen/1)
%Exdantic.Config.Builder{...}
iex> builder |> Exdantic.Config.Builder.when_true(true, fn b ->
...> b |> Exdantic.Config.Builder.strict() |> Exdantic.Config.Builder.forbid_extra()
...> end)
%Exdantic.Config.Builder{opts: %{strict: true, extra: :forbid}}