View Source Ash.Type.NewType behaviour (ash v2.17.0)
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.
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