package org.codehaus.jackson.map.deser.std;

import java.io.IOException;

import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.annotate.JacksonStdImpl;
import org.codehaus.jackson.util.TokenBuffer;

/**
 * We also want to directly support deserialization of
 * {@link TokenBuffer}.
 *<p>
 * Note that we use scalar deserializer base just because we claim
 * to be of scalar for type information inclusion purposes; actual
 * underlying content can be of any (Object, Array, scalar) type.
 *
 * @since 1.9 (moved from higher-level package)
 */
@JacksonStdImpl
public class TokenBufferDeserializer
    extends StdScalarDeserializer<TokenBuffer>
{
    public TokenBufferDeserializer() { super(TokenBuffer.class); }

    @Override
    public TokenBuffer deserialize(JsonParser jp, DeserializationContext ctxt)
        throws IOException, JsonProcessingException
    {
        TokenBuffer tb = new TokenBuffer(jp.getCodec());
        // quite simple, given that TokenBuffer is a JsonGenerator:
        tb.copyCurrentStructure(jp);
        return tb;
    }
}
