input - the atomic value to be converted, which the caller guarantees to be of the appropriate
type for the converter. The results are undefined if the value is of the wrong type;
possible outcomes are (apparent) success, or a ClassCastException.
the result of the conversion, as an AtomicValue, if conversion succeeds, or a ValidationFailure
object describing the reasons for failure if conversion is not possible. Note that the ValidationFailure
object is not (and does not contain) an exception, because it does not necessarily result in an error being
thrown, and creating exceptions on non-failure paths is expensive.