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