package io.gsonfire.gson; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import io.gsonfire.util.SimpleIterable; import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; /** * Created by julio on 6/23/15. */ public final class SimpleIterableTypeAdapter extends TypeAdapter<SimpleIterable<?>> { private final Gson gson; private final Type type; public SimpleIterableTypeAdapter(Gson gson, Type type) { this.gson = gson; this.type = type; } @Override public void write(JsonWriter out, SimpleIterable<?> iterable) throws IOException { if(iterable != null) { out.beginArray(); for(Object v: iterable) { gson.toJson(v, v.getClass(), out); } out.endArray(); } else { out.nullValue(); } } @Override public SimpleIterable<?> read(JsonReader in) throws IOException { if(in.peek() == JsonToken.NULL) { return null; } else { Collection result = new ArrayList(); in.beginArray(); while(in.hasNext()) { Object obj = gson.fromJson(in, type); result.add(obj); } in.endArray(); return SimpleIterable.of(result); } } }