View Source Ash.Type.NewType behaviour (ash v3.4.45)

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, the init/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

t()

@type t() :: module() | atom() | {:array, module() | atom()}

Callbacks

subtype_constraints()

@callback subtype_constraints() :: Keyword.t()

Returns the underlying subtype constraints

subtype_of()

@callback subtype_of() :: module() | atom()

Returns the type that the NewType is a subtype of.

type_constraints(constraints, subtype_constraints)

@callback type_constraints(constraints :: Keyword.t(), subtype_constraints :: Keyword.t()) ::
  Keyword.t()

Returns the modified NewType constraints

Functions

constraints(type, constraints)

@spec constraints(Ash.Type.t(), Keyword.t()) :: Keyword.t()

Returns the constraints schema.

new_type?(type)

@spec new_type?(Ash.Type.t()) :: boolean()

Returns true if the corresponding type is an Ash.Type.NewType

subtype_of(type)

@spec subtype_of(t()) :: Ash.Type.t()

Returns the type that the given newtype is a subtype of