Ash.Type.NewType behaviour (ash v3.5.24)
View SourceAllows defining a new type that is the combination of an existing type and custom constraints
A subtle difference between this type and its supertype (one that will almost certainly not matter
in any case) is that we use the apply_constraints
logic of the underlying type in the same step
as cast_input
. We do this because new types like these are, generally speaking, considering the constraint
application as part of the core type. Other types, if you simply do Ash.Type.cast_input/3
you will not be
also applying their constraints.
Options
:subtype_of
- The type that this new type is a subtype of.:constraints
- The constraints that this new type uses for the underlying type.:lazy_init?
- If true, theinit/1
function will be called at runtime instead of compile time. Allows for recursive types.
For Example:
defmodule MyApp.Types.SSN do
use Ash.Type.NewType, subtype_of: :string, constraints: [match: ~r/regex for ssn/]
end
defmodule MyApp.Types.Metadata do
use Ash.Type.NewType, subtype_of: :union, constraints: [types: [
foo: [...],
bar: [...]
]]
end
Summary
Callbacks
Whether or not the type is lazy initialized (so needs to be initialized when fetching constraints)
Returns the underlying subtype constraints
Returns the type that the NewType is a subtype of.
Returns the modified NewType constraints
Functions
Returns the constraints schema.
Returns true if the corresponding type is an Ash.Type.NewType
Returns the type that the given newtype is a subtype of
Types
Callbacks
@callback lazy_init?() :: boolean()
Whether or not the type is lazy initialized (so needs to be initialized when fetching constraints)
@callback subtype_constraints() :: Keyword.t()
Returns the underlying subtype constraints
Returns the type that the NewType is a subtype of.
@callback type_constraints(constraints :: Keyword.t(), subtype_constraints :: Keyword.t()) :: Keyword.t()
Returns the modified NewType constraints
Functions
@spec constraints(Ash.Type.t(), Keyword.t()) :: Keyword.t()
Returns the constraints schema.
@spec new_type?(Ash.Type.t()) :: boolean()
Returns true if the corresponding type is an Ash.Type.NewType
@spec subtype_of(t()) :: Ash.Type.t()
Returns the type that the given newtype is a subtype of