[serde-extension] Improve exception handling

This commit is contained in:
2025-06-28 23:28:33 +02:00
parent dc318722d3
commit 4fc8cb4ac7
7 changed files with 106 additions and 42 deletions

View File

@@ -4,10 +4,7 @@ import com.google.auto.service.AutoService;
import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.TweedExtension;
import de.siphalor.tweed5.core.api.middleware.Middleware;
import de.siphalor.tweed5.data.extension.api.TweedEntryReader;
import de.siphalor.tweed5.data.extension.api.TweedEntryWriter;
import de.siphalor.tweed5.data.extension.api.TweedReadContext;
import de.siphalor.tweed5.data.extension.api.TweedWriteContext;
import de.siphalor.tweed5.data.extension.api.*;
import de.siphalor.tweed5.data.extension.api.extension.ReadWriteExtensionSetupContext;
import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension;
import de.siphalor.tweed5.dataapi.api.TweedDataReader;
@@ -18,6 +15,7 @@ import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataVisitor;
import de.siphalor.tweed5.defaultextensions.pather.api.PatherExtension;
import de.siphalor.tweed5.patchwork.api.PatchworkPartAccess;
import lombok.val;
import lombok.var;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
@@ -84,7 +82,21 @@ public class PatherExtensionImpl implements PatherExtension, TweedExtension, Rea
pathTracking = new PathTracking();
context.extensionsData().set(rwContextPathTrackingAccess, pathTracking);
return castedInner.read(new PathTrackingDataReader(reader, pathTracking), entry, context);
try {
return castedInner.read(new PathTrackingDataReader(reader, pathTracking), entry, context);
} catch (TweedEntryReadException e) {
var exceptionPathTracking = e.context().extensionsData().get(rwContextPathTrackingAccess);
if (exceptionPathTracking != null) {
throw new TweedEntryReadException(
"Exception while reading entry at "
+ String.join("/", exceptionPathTracking.currentPath())
+ ": " + e.getMessage(),
e
);
} else {
throw e;
}
}
};
}
};
@@ -113,7 +125,21 @@ public class PatherExtensionImpl implements PatherExtension, TweedExtension, Rea
pathTracking = new PathTracking();
context.extensionsData().set(rwContextPathTrackingAccess, pathTracking);
castedInner.write(new PathTrackingDataVisitor(writer, pathTracking), value, entry, context);
try {
castedInner.write(new PathTrackingDataVisitor(writer, pathTracking), value, entry, context);
} catch (TweedEntryWriteException e) {
var exceptionPathTracking = e.context().extensionsData().get(rwContextPathTrackingAccess);
if (exceptionPathTracking != null) {
throw new TweedEntryWriteException(
"Exception while writing entry at "
+ String.join("/", exceptionPathTracking.currentPath())
+ ": " + e.getMessage(),
e
);
} else {
throw e;
}
}
};
}
};

View File

@@ -249,7 +249,10 @@ public class ValidationExtensionImpl implements ReadWriteRelatedExtension, Valid
}
if (validationResult.hasError()) {
throw new TweedEntryReadException("Failed to validate entry: " + validationResult.issues());
throw new TweedEntryReadException(
"Failed to validate entry: " + validationResult.issues(),
context
);
}
return validationResult.value();