package org.test4j.json.encoder.single;
import java.io.Writer;
import java.util.List;
import org.test4j.json.encoder.SingleEncoder;
import org.test4j.json.helper.JSONFeature;
@SuppressWarnings({ "rawtypes" })
public abstract class FixedTypeEncoder<T> extends SingleEncoder<T> {
protected FixedTypeEncoder(Class clazz) {
super(clazz);
}
@Override
public final boolean encode(T target, Writer writer, List<String> references) {
try {
return this.encodeFinalType(target, writer);
} catch (Exception e) {
throw this.wrapException(e);
}
}
private final boolean encodeFinalType(T target, Writer writer) throws Exception {
if (target == null) {
writer.append("null");
return true;
}
if (this.unMarkClassFlag) {
this.encodeSingleValue(target, writer);
} else {
writer.append("{");
this.writeClassFlag(target, writer);
writer.append(',');
this.writerSpecProperty(JSONFeature.ValueFlag, writer);
writer.append(':');
this.encodeSingleValue(target, writer);
writer.append('}');
}
return true;
}
protected abstract void encodeSingleValue(T target, Writer writer) throws Exception;
}