View Source Ash.Type.Union (ash v2.14.17)
A union between multiple types, distinguished with a tag or by attempting to validate.
Constraints
:types
- The types to be unioned, a map of an identifier for the enum value to its configuration.
When usingtag
andtag_value
we are referring to a map key that must equal a certain value in order for the value to be considered an instance of that type.
For example:
IMPORTANT:types: [ int: [ type: :integer, constraints: [ max: 10 ] ], object: [ type: MyObjectType, tag: :type, tag_value: "my_object" ], other_object: [ type: MyOtherObjectType, tag: :type, tag_value: "my_other_object" ], other_object_without_type: [ type: MyOtherObjectTypeWithoutType, tag: :type, tag_value: nil ] ]
This is stored as a map under the hood. Filters over the data will need to take this into account.
Additionally, if you are not using a tag, a value will be considered to be of the given type if it successfully casts. This means that, for example, if you try to cast"10"
as a union of a string and an integer, it will end up as"10"
because it is a string. If you put the integer type ahead of the string type, it will cast first and10
will be the value.