Construct v2.1.10 Construct behaviour View Source
Construct internally divided into three components:
Construct
— defining structures;Construct.Cast
— making structure instances;Construct.Type
— type-coercion and custom type behaviour.
Construct definition
defmodule StructureName do
use Construct, struct_opts
structure do
include AnotherStructure
field name, type, options
end
end
struct_opts
is options passed to make/2
and make!/2
, described in Construct.Cast.make/3
.
When you type use Construct
— library bootstrapped few functions with Construct
behaviour:
make/2
— just an alias toConstruct.Cast.make/3
;make!/2
— alias tomake/2
but throwsConstruct.MakeError
exception if provided params are invalid;cast/2
— alias tomake/2
too, for followConstruct.Type
behaviour and use defined structure as type.
Link to this section Summary
Functions
Checks if provided module is Construct definition
Defines field on the structure with given name, type and options
Includes provided structure and checks definition for validity at compile-time
Defines a structure
Collects types from defined Construct module to map
Callbacks
Alias to make/2
, used to follow Construct.Type.cast/1
callback
Alias to make/2
, but raises an Construct.MakeError
exception if params have errors
Alias to Construct.Cast.make/3
Link to this section Types
Link to this section Functions
Checks if provided module is Construct definition
field(atom(), Construct.Type.t(), Keyword.t()) :: Macro.t()
Defines field on the structure with given name, type and options.
Checks definition validity at compile time by name, type and options.
For custom types checks for module existence and Construct.Type.cast/1
callback.
If field definition is invalid for some reason — it throws an Construct.DefinitionError
exception with detailed reason.
Options
:default
— sets default value for that field:The default value is calculated at compilation time, so don’t use expressions like DateTime.utc_now or Ecto.UUID.generate as they would then be the same for all structures;
Value from params is compared with default value before and after type cast;
If you pass
field :a, type, default: nil
andmake(%{a: nil})
— type coercion will not be used,nil
compares with default value and just appends that value to structure;If field doesn’t exist in params, it will use default value.
By default this option is unset. Notice that you can’t use functions as a default value.
Includes provided structure and checks definition for validity at compile-time.
Options
:only
- (integer) specify fields that should be taken from included module, throws an error when field doesn’t exist in provided module.
If included structure is invalid for some reason — this macro throws an
Construct.DefinitionError
exception with detailed reason.
Defines a structure.
Collects types from defined Construct module to map
Link to this section Callbacks
Alias to make/2
, used to follow Construct.Type.cast/1
callback.
To use this structure as custom type.
Alias to make/2
, but raises an Construct.MakeError
exception if params have errors.
Alias to Construct.Cast.make/3
.