View Source Ash.Type.NewType behaviour (ash v3.4.47)
Allows 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
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
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