static Object readObjectFrom(Input input, Schema<?> schema, Object owner,
            IdStrategy strategy) throws IOException
    {
        if (ID_ENUM != input.readFieldNumber(schema))
            throw new ProtostuffException("Corrupt input.");

        final EnumIO<?> eio = strategy.resolveEnumFrom(input);

        if (ID_ENUM_VALUE != input.readFieldNumber(schema))
            throw new ProtostuffException("Corrupt input.");

        final Object value = eio.readFrom(input);

        if (input instanceof GraphInput)
        {
            // update the actual reference.
            ((GraphInput) input).updateLast(value, owner);
        }

        if (0 != input.readFieldNumber(schema))
            throw new ProtostuffException("Corrupt input.");

        return value;
    }
Used when a field is declared as {@code Enum<?>} (with or with-out generics).

@author David Yu
@created Apr 25, 2012
protostuff-runtime/src/main/java/io/protostuff/runtime/PolymorphicEnumSchema.java