package jstellarapi.ds.account.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 BalanceAdapter extends TypeAdapter<Balance> { @Override public void write(JsonWriter out, Balance balance) throws IOException { if(balance==null||balance.getCurrency()==null){ out.nullValue(); }else if("STR".equals(balance.getCurrency())||balance.getCurrency()==null||balance.getIssuer()==null){ out.value(balance.getValue().toPlainString()); }else{ out.beginObject(); out.name("currency"); out.value(balance.getCurrency()); out.name("issuer"); out.value(balance.getIssuer()); out.name("value"); out.value(balance.getValue().toPlainString()); out.endObject(); } } @Override public Balance read(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NULL) { reader.nextNull(); return null; } else if (reader.peek() == JsonToken.STRING) { String amt = reader.nextString(); Balance balance = new Balance().withCurrency("STR").withValue(new BigDecimal(amt)); return balance; }else if (reader.peek() == JsonToken.BEGIN_OBJECT) { reader.beginObject(); Balance balance = new Balance(); while(reader.hasNext()){ String name = reader.nextName(); String val = reader.nextString(); switch(name){ case "currency": balance.setCurrency(val); break; case "issuer": balance.setIssuer(val); break; case "value": balance.setValue(new BigDecimal(val)); break; } } reader.endObject(); return balance; } throw new IOException(); } }