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