package com.koushikdutta.async.parser; import com.koushikdutta.async.ByteBufferList; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.future.Future; import com.koushikdutta.async.future.TransformFuture; import java.lang.reflect.Type; import java.nio.charset.Charset; /** * Created by koush on 5/27/13. */ public class StringParser implements AsyncParser<String> { Charset forcedCharset; public StringParser() { } public StringParser(Charset charset) { this.forcedCharset = charset; } @Override public Future<String> parse(DataEmitter emitter) { final String charset = emitter.charset(); return new ByteBufferListParser().parse(emitter) .then(new TransformFuture<String, ByteBufferList>() { @Override protected void transform(ByteBufferList result) throws Exception { Charset charsetToUse = forcedCharset; if (charsetToUse == null && charset != null) charsetToUse = Charset.forName(charset); setComplete(result.readString(charsetToUse)); } }); } @Override public void write(DataSink sink, String value, CompletedCallback completed) { new ByteBufferListParser().write(sink, new ByteBufferList(value.getBytes()), completed); } @Override public Type getType() { return String.class; } }