RadixDeserializerFactory.java

package tools.jackson.databind.deser.jdk;

import com.fasterxml.jackson.annotation.JsonFormat;

import tools.jackson.databind.deser.std.FromStringWithRadixToNumberDeserializer;
import tools.jackson.databind.deser.std.StdDeserializer;
import tools.jackson.databind.deser.std.StdScalarDeserializer;

/**
 * Factory class for {@link FromStringWithRadixToNumberDeserializer} for deserializers in {@link tools.jackson.databind.deser.jdk.NumberDeserializers}
 *
 * @since 3.1
 */
public class RadixDeserializerFactory
{
    public static StdDeserializer<? extends Number> createRadixStringDeserializer(
            StdScalarDeserializer<? extends  Number> initialDeser,
            JsonFormat.Value formatOverrides)
    {
        if (formatOverrides != null && formatOverrides.getShape() == JsonFormat.Shape.STRING) {
            if (isSerializeWithRadixOverride(formatOverrides)) {
                int radix = formatOverrides.getRadix();
                return new FromStringWithRadixToNumberDeserializer(initialDeser, radix);
            }
        }
        return initialDeser;
    }

    /**
     * Check if we have a proper {@link JsonFormat} annotation for serializing a number
     * using an alternative radix specified in the annotation.
     */
    private static boolean isSerializeWithRadixOverride(JsonFormat.Value format) {
        return format.hasNonDefaultRadix();
    }
}