diff --git a/src/main/java/dev.toad/RetryStrategy.java b/src/main/java/dev.toad/RetryStrategy.java index 3b33972..bb73265 100644 --- a/src/main/java/dev.toad/RetryStrategy.java +++ b/src/main/java/dev.toad/RetryStrategy.java @@ -4,11 +4,13 @@ import java.time.Duration; import java.util.Optional; public abstract sealed class RetryStrategy { + @Override public boolean equals(Object other) { return switch (this) { case Exponential self -> switch (other) { - case Exponential e -> e.initMin == self.initMin && e.initMax == self.initMax; + case Exponential e -> e.initMin == self.initMin && + e.initMax == self.initMax; default -> false; }; case Linear self -> switch (other) { @@ -20,10 +22,12 @@ public abstract sealed class RetryStrategy { } public final class Exponential extends RetryStrategy { + public final Duration initMin; public final Duration initMax; private static native Exponential fromRust(byte[] mem); + private native byte[] toRust(); public Exponential(Duration initMin, Duration initMax) { @@ -33,10 +37,12 @@ public abstract sealed class RetryStrategy { } public final class Linear extends RetryStrategy { + public final Duration min; public final Duration max; private static native Linear fromRust(byte[] mem); + private native byte[] toRust(); public Linear(Duration min, Duration max) { diff --git a/src/main/java/dev.toad/Runtime.java b/src/main/java/dev.toad/Runtime.java index c2a0bd1..67b9146 100644 --- a/src/main/java/dev.toad/Runtime.java +++ b/src/main/java/dev.toad/Runtime.java @@ -1,6 +1,7 @@ package dev.toad; public class Runtime { + public static native void init(RuntimeOptions o); private Runtime() {} diff --git a/src/main/java/dev.toad/msg/Message.java b/src/main/java/dev.toad/msg/Message.java index 2e56879..d2c930f 100644 --- a/src/main/java/dev.toad/msg/Message.java +++ b/src/main/java/dev.toad/msg/Message.java @@ -4,10 +4,16 @@ import java.util.List; public interface Message { public int id(); + public byte[] token(); + public MessageCode code(); + public MessageType type(); + public List options(); + public byte[] payloadBytes(); + public String payloadString(); } diff --git a/src/main/java/dev.toad/msg/MessageOption.java b/src/main/java/dev.toad/msg/MessageOption.java index 8b2e410..3993f1c 100644 --- a/src/main/java/dev.toad/msg/MessageOption.java +++ b/src/main/java/dev.toad/msg/MessageOption.java @@ -4,5 +4,6 @@ import java.util.List; public interface MessageOption { public long number(); + public List values(); } diff --git a/src/main/java/dev.toad/msg/MessageOptionOwned.java b/src/main/java/dev.toad/msg/MessageOptionOwned.java index ea34222..a13f3e7 100644 --- a/src/main/java/dev.toad/msg/MessageOptionOwned.java +++ b/src/main/java/dev.toad/msg/MessageOptionOwned.java @@ -6,17 +6,25 @@ import java.util.List; import java.util.stream.Collectors; public class MessageOptionOwned implements MessageOption { + public final long number; public final List values; public MessageOptionOwned(MessageOptionRef ref) { this.number = ref.number(); - this.values = Arrays.asList(ref.valueRefs()) - .stream() - .map(MessageOptionValueRef::clone) - .collect(Collectors.toList()); + this.values = + Arrays + .asList(ref.valueRefs()) + .stream() + .map(MessageOptionValueRef::clone) + .collect(Collectors.toList()); } - public long number() {return this.number;} - public List values() {return this.values;} + public long number() { + return this.number; + } + + public List values() { + return this.values; + } } diff --git a/src/main/java/dev.toad/msg/MessageOptionRef.java b/src/main/java/dev.toad/msg/MessageOptionRef.java index 175caa9..2fb38a6 100644 --- a/src/main/java/dev.toad/msg/MessageOptionRef.java +++ b/src/main/java/dev.toad/msg/MessageOptionRef.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.List; public class MessageOptionRef implements MessageOption { + private final long addr; private final long number; diff --git a/src/main/java/dev.toad/msg/MessageOptionValue.java b/src/main/java/dev.toad/msg/MessageOptionValue.java index bb8a878..1283c20 100644 --- a/src/main/java/dev.toad/msg/MessageOptionValue.java +++ b/src/main/java/dev.toad/msg/MessageOptionValue.java @@ -2,5 +2,6 @@ package dev.toad.msg; public interface MessageOptionValue { public byte[] asBytes(); + public String asString(); } diff --git a/src/main/java/dev.toad/msg/MessageOptionValueOwned.java b/src/main/java/dev.toad/msg/MessageOptionValueOwned.java index bcdf0e5..e11d707 100644 --- a/src/main/java/dev.toad/msg/MessageOptionValueOwned.java +++ b/src/main/java/dev.toad/msg/MessageOptionValueOwned.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.stream.Collectors; public class MessageOptionValueOwned implements MessageOptionValue { + public final byte[] bytes; public MessageOptionValueOwned(MessageOptionValueRef ref) { diff --git a/src/main/java/dev.toad/msg/MessageOptionValueRef.java b/src/main/java/dev.toad/msg/MessageOptionValueRef.java index 500aa68..04ae6ab 100644 --- a/src/main/java/dev.toad/msg/MessageOptionValueRef.java +++ b/src/main/java/dev.toad/msg/MessageOptionValueRef.java @@ -1,7 +1,9 @@ package dev.toad.msg; public class MessageOptionValueRef implements MessageOptionValue { + private final long addr; + private native byte[] bytes(long addr); public MessageOptionValueRef(long addr) { diff --git a/src/main/java/dev.toad/msg/MessageOwned.java b/src/main/java/dev.toad/msg/MessageOwned.java index f15d9f4..3eacae8 100644 --- a/src/main/java/dev.toad/msg/MessageOwned.java +++ b/src/main/java/dev.toad/msg/MessageOwned.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.stream.Collectors; public class MessageOwned implements Message { + private static int id; private static byte[] token; private static byte[] payload; @@ -20,10 +21,12 @@ public class MessageOwned implements Message { this.type = ref.type(); this.payload = ref.payloadBytes().clone(); - this.opts = Arrays.asList(ref.optionRefs()) - .stream() - .map(MessageOptionRef::clone) - .collect(Collectors.toList()); + this.opts = + Arrays + .asList(ref.optionRefs()) + .stream() + .map(MessageOptionRef::clone) + .collect(Collectors.toList()); } public int id() { diff --git a/src/main/java/dev.toad/msg/MessageRef.java b/src/main/java/dev.toad/msg/MessageRef.java index c3d3b12..6509e4e 100644 --- a/src/main/java/dev.toad/msg/MessageRef.java +++ b/src/main/java/dev.toad/msg/MessageRef.java @@ -11,13 +11,19 @@ import java.util.List; * MessageRef should never be stored in state; invoke `.clone()` first. */ public class MessageRef implements Message { + private final long addr; private static native int id(long addr); + private static native byte[] token(long addr); + private static native byte[] payload(long addr); + private static native MessageCode code(long addr); + private static native MessageType type(long addr); + private static native MessageOptionRef[] opts(long addr); public MessageRef(long addr) { diff --git a/src/main/java/dev.toad/msg/MessageType.java b/src/main/java/dev.toad/msg/MessageType.java index 6425202..a762ef0 100644 --- a/src/main/java/dev.toad/msg/MessageType.java +++ b/src/main/java/dev.toad/msg/MessageType.java @@ -1,27 +1,40 @@ package dev.toad.msg; public enum MessageType { - CON(1), NON(2), ACK(3), RESET(4); + CON(1), + NON(2), + ACK(3), + RESET(4); private MessageType(int val) {} public String toString() { - switch(this) { - case CON: return "CON"; - case NON: return "NON"; - case ACK: return "ACK"; - case RESET: return "RESET"; - default: throw new Error(); + switch (this) { + case CON: + return "CON"; + case NON: + return "NON"; + case ACK: + return "ACK"; + case RESET: + return "RESET"; + default: + throw new Error(); } } public static MessageType fromString(String s) { - switch(s.toLowerCase().trim()) { - case "con": return CON; - case "non": return NON; - case "ack": return ACK; - case "reset": return RESET; - default: throw new Error(); + switch (s.toLowerCase().trim()) { + case "con": + return CON; + case "non": + return NON; + case "ack": + return ACK; + case "reset": + return RESET; + default: + throw new Error(); } } }