package com.urbanairship.api.channel.parse.web; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableMap; import com.urbanairship.api.channel.Constants; import com.urbanairship.api.channel.model.web.Subscription; import com.urbanairship.api.common.parse.FieldParser; import com.urbanairship.api.common.parse.FieldParserRegistry; import com.urbanairship.api.common.parse.MapFieldParserRegistry; import com.urbanairship.api.common.parse.StandardObjectDeserializer; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.DeserializationContext; import org.codehaus.jackson.map.JsonDeserializer; import java.io.IOException; public class SubscriptionDeserializer extends JsonDeserializer<Subscription> { private static final FieldParserRegistry<Subscription, SubscriptionReader> FIELD_PARSERS = new MapFieldParserRegistry<Subscription, SubscriptionReader>( ImmutableMap.<String, FieldParser<SubscriptionReader>>builder() .put(Constants.AUTH, new FieldParser<SubscriptionReader>() { @Override public void parse(SubscriptionReader reader, JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { reader.readAuth(jsonParser); } }) .put(Constants.P256DH, new FieldParser<SubscriptionReader>() { @Override public void parse(SubscriptionReader reader, JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { reader.readP256dh(jsonParser); } }) .build() ); private final StandardObjectDeserializer<Subscription, ?> deserializer; public SubscriptionDeserializer() { deserializer = new StandardObjectDeserializer<Subscription, SubscriptionReader>( FIELD_PARSERS, new Supplier<SubscriptionReader>() { @Override public SubscriptionReader get() { return new SubscriptionReader(); } } ); } @Override public Subscription deserialize(JsonParser parser, DeserializationContext deserializationContext) throws IOException { return deserializer.deserialize(parser, deserializationContext); } }