Behaviour for type casting modules.
opts() :: Keyword.t()
schema() :: map()
cast(input :: any(), opts() | schema()) :: {:ok, result :: any()} | {:error, reason :: any()}