A pattern which can be used to either:
Many common types can be used as JSON patterns.
@type matcher() :: {:datetime, String.t(), String.t()} | {:like, t()} | {:each_like, t()} | {:matching_regex, String.t(), String.t()}
@type t() :: integer() | float() | boolean() | nil | binary() | atom() | [t()] | %{key: t()} | matcher()
@spec datetime(format :: String.t(), example :: String.t()) :: t()
@spec each_like(pattern :: any()) :: t()
@spec json_pattern(pattern :: t()) :: t()
@spec like(pattern :: any()) :: t()
@spec matching_regex(regex :: String.t(), example :: String.t()) :: t()
@spec term(regex :: String.t(), example :: String.t()) :: t()