package jstellarapi.ds.tx; import java.io.IOException; import java.math.BigDecimal; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; public class AmountAdapter extends TypeAdapter<Amount> { @Override public void write(JsonWriter out, Amount amount) throws IOException { if(amount==null||amount.getCurrency()==null){ out.nullValue(); }else if("STR".equals(amount.getCurrency())||amount.getCurrency()==null||amount.getIssuer()==null){ out.value(amount.getValue().toPlainString()); }else{ out.beginObject(); out.name("currency"); out.value(amount.getCurrency()); out.name("issuer"); out.value(amount.getIssuer()); out.name("value"); out.value(amount.getValue().toPlainString()); out.endObject(); } } @Override public Amount read(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NULL) { reader.nextNull(); return null; } else if (reader.peek() == JsonToken.STRING) { String amt = reader.nextString(); Amount amount = new Amount().withCurrency("STR").withValue(new BigDecimal(amt)); return amount; }else if (reader.peek() == JsonToken.BEGIN_OBJECT) { reader.beginObject(); Amount amount = new Amount(); while(reader.hasNext()){ String name = reader.nextName(); String val = reader.nextString(); switch(name){ case "currency": amount.setCurrency(val); break; case "issuer": amount.setIssuer(val); break; case "value": amount.setValue(new BigDecimal(val)); break; } } reader.endObject(); return amount; } throw new IOException(); } }