-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[json-core] Add SimpleMapper API to core to make it easier for readin…
…g/writing simple Maps, Lists etc
- Loading branch information
Showing
9 changed files
with
465 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
json-core/src/main/java/io/avaje/json/simple/DSimpleMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package io.avaje.json.simple; | ||
|
||
import io.avaje.json.core.CoreTypes; | ||
import io.avaje.json.stream.JsonStream; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
|
||
final class DSimpleMapper implements SimpleMapper { | ||
|
||
private final Type<Object> objectType; | ||
private final Type<Map<String,Object>> mapType; | ||
private final Type<List<Object>> listType; | ||
|
||
DSimpleMapper(JsonStream jsonStream, CoreTypes.CoreAdapters adapters) { | ||
this.objectType = new DTypeMapper<>(adapters.objectAdapter(), jsonStream); | ||
this.mapType = new DTypeMapper<>(adapters.mapAdapter(), jsonStream); | ||
this.listType = new DTypeMapper<>(adapters.listAdapter(), jsonStream); | ||
} | ||
|
||
@Override | ||
public Type<Object> object() { | ||
return objectType; | ||
} | ||
|
||
@Override | ||
public Type<Map<String, Object>> map() { | ||
return mapType; | ||
} | ||
|
||
@Override | ||
public Type<List<Object>> list() { | ||
return listType; | ||
} | ||
|
||
@Override | ||
public String toJson(Object object) { | ||
return objectType.toJson(object); | ||
} | ||
|
||
@Override | ||
public Object fromJson(String json) { | ||
return objectType.fromJson(json); | ||
} | ||
|
||
@Override | ||
public Map<String,Object> fromJsonObject(String json) { | ||
return mapType.fromJson(json); | ||
} | ||
|
||
@Override | ||
public List<Object> fromJsonArray(String json) { | ||
return listType.fromJson(json); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
json-core/src/main/java/io/avaje/json/simple/DSimpleMapperBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package io.avaje.json.simple; | ||
|
||
import io.avaje.json.core.CoreTypes; | ||
import io.avaje.json.stream.JsonStream; | ||
|
||
final class DSimpleMapperBuilder implements SimpleMapper.Builder { | ||
|
||
private JsonStream jsonStream; | ||
|
||
@Override | ||
public SimpleMapper.Builder jsonStream(JsonStream jsonStream) { | ||
this.jsonStream = jsonStream; | ||
return this; | ||
} | ||
|
||
@Override | ||
public SimpleMapper build() { | ||
final var stream = jsonStream != null ? jsonStream : JsonStream.builder().build(); | ||
final var coreAdapters = CoreTypes.createCoreAdapters(); | ||
return new DSimpleMapper(stream, coreAdapters); | ||
} | ||
} |
114 changes: 114 additions & 0 deletions
114
json-core/src/main/java/io/avaje/json/simple/DTypeMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
package io.avaje.json.simple; | ||
|
||
import io.avaje.json.JsonAdapter; | ||
import io.avaje.json.JsonException; | ||
import io.avaje.json.JsonReader; | ||
import io.avaje.json.JsonWriter; | ||
import io.avaje.json.stream.BufferedJsonWriter; | ||
import io.avaje.json.stream.BytesJsonWriter; | ||
import io.avaje.json.stream.JsonStream; | ||
|
||
import java.io.*; | ||
|
||
final class DTypeMapper<T> implements SimpleMapper.Type<T> { | ||
|
||
private final JsonAdapter<T> adapter; | ||
private final JsonStream jsonStream; | ||
|
||
DTypeMapper(JsonAdapter<T> adapter, JsonStream jsonStream) { | ||
this.adapter = adapter; | ||
this.jsonStream = jsonStream; | ||
} | ||
|
||
@Override | ||
public T fromJson(JsonReader reader) { | ||
return adapter.fromJson(reader); | ||
} | ||
|
||
@Override | ||
public T fromJson(String content) { | ||
try (JsonReader reader = jsonStream.reader(content)) { | ||
return adapter.fromJson(reader); | ||
} | ||
} | ||
|
||
@Override | ||
public T fromJson(byte[] content) { | ||
try (JsonReader reader = jsonStream.reader(content)) { | ||
return adapter.fromJson(reader); | ||
} | ||
} | ||
|
||
@Override | ||
public T fromJson(Reader content) { | ||
try (JsonReader reader = jsonStream.reader(content)) { | ||
return adapter.fromJson(reader); | ||
} | ||
} | ||
|
||
@Override | ||
public T fromJson(InputStream content) { | ||
try (JsonReader reader = jsonStream.reader(content)) { | ||
return adapter.fromJson(reader); | ||
} | ||
} | ||
|
||
@Override | ||
public String toJson(T value) { | ||
try (BufferedJsonWriter writer = jsonStream.bufferedWriter()) { | ||
toJson(value, writer); | ||
return writer.result(); | ||
} | ||
} | ||
|
||
@Override | ||
public String toJsonPretty(T value) { | ||
try (BufferedJsonWriter writer = jsonStream.bufferedWriter()) { | ||
writer.pretty(true); | ||
toJson(value, writer); | ||
return writer.result(); | ||
} | ||
} | ||
|
||
@Override | ||
public byte[] toJsonBytes(T value) { | ||
try (BytesJsonWriter writer = jsonStream.bufferedWriterAsBytes()) { | ||
toJson(value, writer); | ||
return writer.result(); | ||
} | ||
} | ||
|
||
@Override | ||
public void toJson(T value, JsonWriter writer) { | ||
try { | ||
adapter.toJson(writer, value); | ||
} catch (RuntimeException e) { | ||
writer.markIncomplete(); | ||
throw new JsonException(e); | ||
} | ||
} | ||
|
||
@Override | ||
public void toJson(T value, Writer writer) { | ||
try (JsonWriter jsonWriter = jsonStream.writer(writer)) { | ||
toJson(value, jsonWriter); | ||
} | ||
} | ||
|
||
@Override | ||
public void toJson(T value, OutputStream outputStream) { | ||
try (JsonWriter writer = jsonStream.writer(outputStream)) { | ||
toJson(value, writer); | ||
} | ||
close(outputStream); | ||
} | ||
|
||
private void close(Closeable outputStream) { | ||
try { | ||
outputStream.close(); | ||
} catch (IOException e) { | ||
throw new UncheckedIOException("Error closing stream", e); | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.