[serde-gson] Support for Gson readers and writers

This commit is contained in:
2025-08-03 20:21:33 +02:00
parent c58b806bcf
commit 1fc418970f
23 changed files with 710 additions and 82 deletions

View File

@@ -8,6 +8,8 @@ dependencies {
implementation(project(":tweed5-serde-api"))
implementation(libs.jackson.core)
shadowOnly(libs.jackson.core)
testImplementation(project(":serde-json-test-utils"))
}
tasks.shadowJar {

View File

@@ -2,77 +2,21 @@ package de.siphalor.tweed5.data.jackson;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.StreamReadFeature;
import de.siphalor.tweed5.dataapi.api.TweedDataReader;
import de.siphalor.tweed5.testutils.serde.json.JsonReaderTest;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
class JacksonReaderTest {
class JacksonReaderTest implements JsonReaderTest {
@SneakyThrows
@Test
void complex() {
var inputStream = new ByteArrayInputStream("""
{
"first": [
[ 1 ]
],
"second": {
"test": "Hello World!"
}
}
""".getBytes(StandardCharsets.UTF_8));
try (var parser = JsonFactory.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build().createParser(inputStream)) {
var reader = new JacksonReader(parser);
var token = reader.peekToken();
assertThat(token.isMapStart()).isTrue();
token = reader.readToken();
assertThat(token.isMapStart()).isTrue();
token = reader.readToken();
assertThat(token.isMapEntryKey()).isTrue();
assertThat(token.canReadAsString()).isTrue();
assertThat(token.readAsString()).isEqualTo("first");
token = reader.readToken();
assertThat(token.isMapEntryValue()).isTrue();
assertThat(token.isListStart()).isTrue();
token = reader.readToken();
assertThat(token.isMapEntryValue()).isFalse();
assertThat(token.isListValue()).isTrue();
assertThat(token.isListStart()).isTrue();
token = reader.readToken();
assertThat(token.isListValue()).isTrue();
assertThat(token.canReadAsInt()).isTrue();
assertThat(token.readAsInt()).isEqualTo(1);
token = reader.readToken();
assertThat(token.isListValue()).isTrue();
assertThat(token.isListEnd()).isTrue();
token = reader.readToken();
assertThat(token.isListValue()).isFalse();
assertThat(token.isMapEntryValue()).isTrue();
assertThat(token.isListEnd()).isTrue();
token = reader.readToken();
assertThat(token.isMapEntryKey()).isTrue();
assertThat(token.canReadAsString()).isTrue();
assertThat(token.readAsString()).isEqualTo("second");
token = reader.readToken();
assertThat(token.isMapEntryValue()).isTrue();
assertThat(token.isMapStart()).isTrue();
token = reader.readToken();
assertThat(token.isMapEntryValue()).isFalse();
assertThat(token.isMapEntryKey()).isTrue();
assertThat(token.canReadAsString()).isTrue();
assertThat(token.readAsString()).isEqualTo("test");
token = reader.readToken();
assertThat(token.isMapEntryValue()).isTrue();
assertThat(token.canReadAsString()).isTrue();
assertThat(token.readAsString()).isEqualTo("Hello World!");
token = reader.readToken();
assertThat(token.isMapEnd()).isTrue();
token = reader.readToken();
assertThat(token.isMapEnd()).isTrue();
}
@Override
public TweedDataReader createJsonReader(String text) {
var parser = JsonFactory.builder()
.enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION)
.build()
.createParser(new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)));
return new JacksonReader(parser);
}
}