package org.test4j.json.decoder.single.spec;
import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.Type;
import org.test4j.json.decoder.base.DecoderException;
import org.test4j.json.decoder.base.SpecTypeDecoder;
@SuppressWarnings({ "rawtypes" })
public class AppendableDecoder extends SpecTypeDecoder {
public final static AppendableDecoder toAPPENDABLE = new AppendableDecoder();
@Override
protected Object decodeFromString(String value, Type type) {
Class claz = this.getRawType(type, StringWriter.class);
Appendable target = new StringWriter();
if (StringBuffer.class.isAssignableFrom(claz)) {
target = new StringBuffer();
} else if (StringBuilder.class.isAssignableFrom(claz)) {
target = new StringBuilder();
}
try {
target.append(value);
return target;
} catch (IOException e) {
String message = "can't cast value[" + value + "] to " + claz.getName();
throw new DecoderException(message, e);
}
}
public boolean accept(Type type) {
Class claz = this.getRawType(type, null);
return Appendable.class.isAssignableFrom(claz);
}
}