diff --git a/json-core/src/main/java/io/avaje/json/simple/DSimpleMapper.java b/json-core/src/main/java/io/avaje/json/simple/DSimpleMapper.java index ce71b36a..efeee792 100644 --- a/json-core/src/main/java/io/avaje/json/simple/DSimpleMapper.java +++ b/json-core/src/main/java/io/avaje/json/simple/DSimpleMapper.java @@ -1,6 +1,7 @@ package io.avaje.json.simple; import io.avaje.json.JsonAdapter; +import io.avaje.json.PropertyNames; import io.avaje.json.core.CoreTypes; import io.avaje.json.stream.JsonStream; @@ -21,6 +22,11 @@ final class DSimpleMapper implements SimpleMapper { this.listType = new DTypeMapper<>(adapters.listAdapter(), jsonStream); } + @Override + public PropertyNames properties(String... names) { + return jsonStream.properties(names); + } + @Override public Type type(JsonAdapter myAdapter) { return new DTypeMapper<>(myAdapter, jsonStream); diff --git a/json-core/src/main/java/io/avaje/json/simple/SimpleMapper.java b/json-core/src/main/java/io/avaje/json/simple/SimpleMapper.java index 3b1f0156..0831e923 100644 --- a/json-core/src/main/java/io/avaje/json/simple/SimpleMapper.java +++ b/json-core/src/main/java/io/avaje/json/simple/SimpleMapper.java @@ -3,6 +3,7 @@ import io.avaje.json.JsonAdapter; import io.avaje.json.JsonReader; import io.avaje.json.JsonWriter; +import io.avaje.json.PropertyNames; import io.avaje.json.stream.JsonStream; import java.io.InputStream; @@ -42,6 +43,14 @@ static Builder builder() { return new DSimpleMapperBuilder(); } + /** + * Return the property names as PropertyNames. + *

+ * Provides the option of optimising the writing of json for property names + * by having them already escaped and encoded rather than as plain strings. + */ + PropertyNames properties(String... names); + /** * Return a mapper for Object with more reading/writing options. */ diff --git a/json-core/src/test/java/io/avaje/json/simple/CustomAdapter2Test.java b/json-core/src/test/java/io/avaje/json/simple/CustomAdapter2Test.java index 1b50a5e3..e492b826 100644 --- a/json-core/src/test/java/io/avaje/json/simple/CustomAdapter2Test.java +++ b/json-core/src/test/java/io/avaje/json/simple/CustomAdapter2Test.java @@ -3,6 +3,7 @@ import io.avaje.json.JsonAdapter; import io.avaje.json.JsonReader; import io.avaje.json.JsonWriter; +import io.avaje.json.PropertyNames; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -14,7 +15,8 @@ class CustomAdapter2Test { @Test void mapUsingCustomAdapter() { - MyAdapterUsingRaw myAdapter = new MyAdapterUsingRaw(); + PropertyNames names = simpleMapper.properties("foo", "bar"); + MyAdapterUsingRaw myAdapter = new MyAdapterUsingRaw(names); SimpleMapper.Type type = simpleMapper.type(myAdapter); @@ -36,12 +38,21 @@ static class MyOtherType { static class MyAdapterUsingRaw implements JsonAdapter { + private final PropertyNames names; + + MyAdapterUsingRaw(PropertyNames names) { + this.names = names; + } + @Override public void toJson(JsonWriter writer, MyOtherType value) { - writer.beginObject(); - writer.name("foo"); + writer.beginObject(names); + writer.name(0); + // writer.beginObject(); + // writer.name("foo"); writer.value(value.foo); - writer.name("bar"); + writer.name(1); + //writer.name("bar"); writer.value(value.bar); writer.endObject(); }