All the types that implement this protocol.
@type as() :: map() | struct() | [as()] | (t() -> as())
@type decimal() :: boolean()
@type keys() :: :atoms | :atoms!
@type option() :: {:keys, keys()} | {:decimal, decimal()} | {:as, as()}
@type options() :: %{ optional(:keys) => keys(), optional(:decimal) => decimal(), optional(:as) => as() }
@type t() :: term()
@spec decode(t(), options()) :: any()