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

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

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

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

Callbacks

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

Returns the underlying subtype constraints

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

Returns the type that the NewType is a subtype of.

Link to this callback

type_constraints(constraints, subtype_constraints)

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

Returns the modified NewType constraints

Functions

Link to this function

constraints(type, constraints)

View Source
@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