diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 28da147..e8b0d1e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ java-test = "21" jetbrains-annotations = "26.0.1" jspecify = "1.0.0" junit = "5.12.0" -lombok = "1.18.38" +lombok = "1.18.44" logback = "1.5.18" mockito = "5.14.2" shadow = "9.3.0" diff --git a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatMappersImpl.java b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatMappersImpl.java index 0a35471..fc1e7ea 100644 --- a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatMappersImpl.java +++ b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatMappersImpl.java @@ -324,6 +324,14 @@ public class TweedCoatMappersImpl { public Patchwork extensionsData() { return readExtData; } + + @Override + public > TweedReadResult readSubEntry( + TweedDataReader reader, + C entry + ) { + return TweedReadResult.empty(); + } } ); } diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/ReadWriteExtension.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/ReadWriteExtension.java index dad8132..f0b84dd 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/ReadWriteExtension.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/ReadWriteExtension.java @@ -126,6 +126,4 @@ public interface ReadWriteExtension extends TweedExtension { Patchwork contextExtensionsData ) throws TweedEntryWriteException; - > TweedEntryReader getReaderChain(C entry); - > TweedEntryWriter getWriterChain(C entry); } diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedReadContext.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedReadContext.java index 10ecb64..78b5085 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedReadContext.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedReadContext.java @@ -1,8 +1,16 @@ package de.siphalor.tweed5.serde.extension.api; +import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.patchwork.api.Patchwork; +import de.siphalor.tweed5.serde.extension.api.read.result.TweedReadResult; +import de.siphalor.tweed5.serde_api.api.TweedDataReader; +import org.jspecify.annotations.Nullable; public interface TweedReadContext { ReadWriteExtension readWriteExtension(); Patchwork extensionsData(); + + > TweedReadResult readSubEntry( + TweedDataReader reader, C entry + ); } diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedWriteContext.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedWriteContext.java index 1ec9aec..3da070e 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedWriteContext.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/api/TweedWriteContext.java @@ -1,8 +1,15 @@ package de.siphalor.tweed5.serde.extension.api; +import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.patchwork.api.Patchwork; +import de.siphalor.tweed5.serde_api.api.TweedDataVisitor; +import de.siphalor.tweed5.serde_api.api.TweedDataWriteException; +import org.jspecify.annotations.Nullable; public interface TweedWriteContext { - ReadWriteExtension readWriteExtension(); Patchwork extensionsData(); + + > void writeSubEntry( + TweedDataVisitor writer, @Nullable T value, C entry + ) throws TweedEntryWriteException, TweedDataWriteException; } diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/ReadWriteExtensionImpl.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/ReadWriteExtensionImpl.java index 8569fe9..c37a827 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/ReadWriteExtensionImpl.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/ReadWriteExtensionImpl.java @@ -179,14 +179,12 @@ public class ReadWriteExtensionImpl implements ReadWriteExtension { private TweedEntryWriter writerChain; } - @Override - public > TweedEntryReader getReaderChain(C entry) { + > TweedEntryReader getReaderChain(C entry) { //noinspection unchecked return (TweedEntryReader) entry.extensionsData().get(customEntryDataAccess).readerChain(); } - @Override - public > TweedEntryWriter getWriterChain(C entry) { + > TweedEntryWriter getWriterChain(C entry) { //noinspection unchecked return (TweedEntryWriter) entry.extensionsData().get(customEntryDataAccess).writerChain(); } diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedEntryReaderWriterImpls.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedEntryReaderWriterImpls.java index 2f61ee5..eb499e8 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedEntryReaderWriterImpls.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedEntryReaderWriterImpls.java @@ -13,7 +13,6 @@ import de.siphalor.tweed5.serde_api.api.*; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; -import lombok.val; import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; @@ -51,8 +50,7 @@ public class TweedEntryReaderWriterImpls { return TweedReadResult.failed(TweedReadIssue.error(e, context)); } - TweedEntryReader> nonNullReader = context.readWriteExtension().getReaderChain(entry.nonNullEntry()); - return nonNullReader.read(reader, entry.nonNullEntry(), context); + return context.readSubEntry(reader, entry.nonNullEntry()); } @Override @@ -65,8 +63,7 @@ public class TweedEntryReaderWriterImpls { if (value == null) { writer.visitNull(); } else { - TweedEntryWriter> nonNullWriter = context.readWriteExtension().getWriterChain(entry.nonNullEntry()); - nonNullWriter.write(writer, value, entry.nonNullEntry(), context); + context.writeSubEntry(writer, value, entry.nonNullEntry()); } } } @@ -161,8 +158,6 @@ public class TweedEntryReaderWriterImpls { } ConfigEntry elementEntry = entry.elementEntry(); - TweedEntryReader> elementReader = context.readWriteExtension().getReaderChain(elementEntry); - List list = new ArrayList<>(20); List issues = new ArrayList<>(); while (true) { @@ -172,7 +167,7 @@ public class TweedEntryReaderWriterImpls { reader.readToken(); break; } else if (token.isListValue()) { - TweedReadResult elementResult = elementReader.read(reader, elementEntry, context); + TweedReadResult elementResult = context.readSubEntry(reader, elementEntry); issues.addAll(Arrays.asList(elementResult.issues())); if (elementResult.isFailed() || elementResult.isError()) { return TweedReadResult.failed(issues.toArray(new TweedReadIssue[0])); @@ -207,11 +202,10 @@ public class TweedEntryReaderWriterImpls { } ConfigEntry elementEntry = entry.elementEntry(); - TweedEntryWriter> elementWriter = context.readWriteExtension().getWriterChain(elementEntry); writer.visitListStart(); for (T element : value) { - elementWriter.write(writer, element, elementEntry, context); + context.writeSubEntry(writer, element, elementEntry); } writer.visitListEnd(); } @@ -242,8 +236,7 @@ public class TweedEntryReaderWriterImpls { } continue; } - val subEntryReaderChain = context.readWriteExtension().getReaderChain(subEntry); - TweedReadResult subEntryResult = subEntryReaderChain.read(reader, subEntry, context); + TweedReadResult subEntryResult = context.readSubEntry(reader, subEntry); issues.addAll(Arrays.asList(subEntryResult.issues())); if (subEntryResult.isFailed() || subEntryResult.isError()) { return TweedReadResult.failed(issues.toArray(new TweedReadIssue[0])); @@ -281,10 +274,8 @@ public class TweedEntryReaderWriterImpls { String key = e.getKey(); ConfigEntry subEntry = e.getValue(); - TweedEntryWriter> subEntryWriterChain = context.readWriteExtension().getWriterChain(subEntry); - writer.visitMapEntryKey(key); - subEntryWriterChain.write(writer, entry.get(value, key), subEntry, context); + context.writeSubEntry(writer, entry.get(value, key), subEntry); } writer.visitMapEnd(); diff --git a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedReadWriteContextImpl.java b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedReadWriteContextImpl.java index 71a2067..48e1e5e 100644 --- a/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedReadWriteContextImpl.java +++ b/tweed5/serde-extension/src/main/java/de/siphalor/tweed5/serde/extension/impl/TweedReadWriteContextImpl.java @@ -1,13 +1,34 @@ package de.siphalor.tweed5.serde.extension.impl; -import de.siphalor.tweed5.serde.extension.api.ReadWriteExtension; -import de.siphalor.tweed5.serde.extension.api.TweedReadContext; -import de.siphalor.tweed5.serde.extension.api.TweedWriteContext; +import de.siphalor.tweed5.core.api.entry.ConfigEntry; +import de.siphalor.tweed5.serde.extension.api.*; +import de.siphalor.tweed5.serde.extension.api.read.result.TweedReadResult; import de.siphalor.tweed5.patchwork.api.Patchwork; -import lombok.Value; +import de.siphalor.tweed5.serde_api.api.TweedDataReader; +import de.siphalor.tweed5.serde_api.api.TweedDataVisitor; +import de.siphalor.tweed5.serde_api.api.TweedDataWriteException; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.jspecify.annotations.Nullable; -@Value -public class TweedReadWriteContextImpl implements TweedReadContext, TweedWriteContext { - ReadWriteExtension readWriteExtension; - Patchwork extensionsData; +@RequiredArgsConstructor +class TweedReadWriteContextImpl implements TweedReadContext, TweedWriteContext { + @Getter + private final ReadWriteExtensionImpl readWriteExtension; + @Getter + private final Patchwork extensionsData; + + @Override + public > TweedReadResult readSubEntry( + TweedDataReader reader, C entry + ) { + return readWriteExtension.getReaderChain(entry).read(reader, entry, this); + } + + @Override + public > void writeSubEntry( + TweedDataVisitor writer, @Nullable T value, C entry + ) throws TweedEntryWriteException, TweedDataWriteException { + readWriteExtension.getWriterChain(entry).write(writer, value, entry, this); + } }