improvement: Add template guards.

This commit is contained in:
James Harton 2024-03-19 10:42:12 +13:00
parent 181017a884
commit dfc56a871c
Signed by: james
GPG key ID: 90E82DAA13F624F4

View file

@ -10,4 +10,22 @@ defmodule Reactor.Template do
@doc "The type for use in option schemas"
@spec type :: Spark.Options.type()
def type, do: {:or, [{:struct, Input}, {:struct, Result}, {:struct, Value}]}
@doc "A guard for input templates"
@spec is_input_template(any) :: Macro.output()
defguard is_input_template(template) when is_struct(template, Input)
@doc "A guard for result templates"
@spec is_result_template(any) :: Macro.output()
defguard is_result_template(template) when is_struct(template, Result)
@doc "A guard for value templates"
@spec is_value_template(any) :: Macro.output()
defguard is_value_template(template) when is_struct(template, Value)
@doc "A guard to detect all template types"
@spec is_template(any) :: Macro.output()
defguard is_template(template)
when is_input_template(template) or is_result_template(template) or
is_value_template(template)
end