aboutsummaryrefslogtreecommitdiff
path: root/jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java
diff options
context:
space:
mode:
Diffstat (limited to 'jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java')
-rw-r--r--jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java b/jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java
new file mode 100644
index 0000000..2b09645
--- /dev/null
+++ b/jgvariant-ostree/src/main/java/eu/mulk/jgvariant/ostree/DeltaSuperblock.java
@@ -0,0 +1,43 @@
+package eu.mulk.jgvariant.ostree;
+
+import eu.mulk.jgvariant.core.Decoder;
+import java.nio.ByteOrder;
+import java.util.List;
+
+/** Reference: {@code ostree-repo-static-delta-private.h#OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT} */
+public record DeltaSuperblock(
+ Metadata metadata,
+ long timestamp,
+ Checksum fromChecksum,
+ Checksum toChecksum,
+ Commit commit,
+ List<DeltaName> dependencies,
+ List<DeltaMetaEntry> entries,
+ List<DeltaFallback> fallbacks) {
+
+ public record DeltaName(Checksum fromChecksum, Checksum toChecksum) {
+
+ private static final Decoder<DeltaName> DECODER =
+ Decoder.ofStructure(DeltaName.class, Checksum.decoder(), Checksum.decoder());
+
+ public static Decoder<DeltaName> decoder() {
+ return DECODER;
+ }
+ }
+
+ private static final Decoder<DeltaSuperblock> DECODER =
+ Decoder.ofStructure(
+ DeltaSuperblock.class,
+ Metadata.decoder(),
+ Decoder.ofLong().withByteOrder(ByteOrder.BIG_ENDIAN),
+ Checksum.decoder(),
+ Checksum.decoder(),
+ Commit.decoder(),
+ Decoder.ofByteArray().map(x -> List.of()), // FIXME
+ Decoder.ofArray(DeltaMetaEntry.decoder()),
+ Decoder.ofArray(DeltaFallback.decoder()));
+
+ public static Decoder<DeltaSuperblock> decoder() {
+ return DECODER;
+ }
+}