Behaviour and macros for defining custom types.
@callback json_schema() :: map()
@callback type_definition() :: Elixact.Types.type_definition()
@callback validate(term()) :: {:ok, term()} | {:error, term()}