[comment-loader-extension] Introduce comment loader extension

This commit is contained in:
2025-08-05 18:15:53 +02:00
parent 32831c7c22
commit 6f2e715b2a
13 changed files with 467 additions and 4 deletions

View File

@@ -0,0 +1,77 @@
package de.siphalor.tweed5.dataapi.api;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class IntuitiveVisitingTweedDataReader {
private final TweedDataVisitor visitor;
public void readValue(TweedDataReader reader) throws TweedDataReadException {
TweedDataToken token = reader.peekToken();
if (token.isNull()) {
reader.readToken();
visitor.visitNull();
} else if (token.isListStart()) {
readList(reader);
} else if (token.isMapStart()) {
readMap(reader);
} else if (token.canReadAsByte()) {
visitor.visitByte(reader.readToken().readAsByte());
} else if (token.canReadAsShort()) {
visitor.visitShort(reader.readToken().readAsShort());
} else if (token.canReadAsInt()) {
visitor.visitInt(reader.readToken().readAsInt());
} else if (token.canReadAsLong()) {
visitor.visitLong(reader.readToken().readAsLong());
} else if (token.canReadAsFloat()) {
visitor.visitFloat(reader.readToken().readAsFloat());
} else if (token.canReadAsDouble()) {
visitor.visitDouble(reader.readToken().readAsDouble());
} else if (token.canReadAsBoolean()) {
visitor.visitBoolean(reader.readToken().readAsBoolean());
} else if (token.canReadAsString()) {
visitor.visitString(reader.readToken().readAsString());
}
}
public void readList(TweedDataReader reader) throws TweedDataReadException {
TweedDataToken token = reader.readToken();
if (!token.isListStart()) {
throw TweedDataReadException.builder().message("Expected list but got " + token).build();
}
visitor.visitListStart();
while (true) {
token = reader.peekToken();
if (token.isListEnd()) {
visitor.visitListEnd();
reader.readToken();
break;
} else {
readValue(reader);
}
}
}
public void readMap(TweedDataReader reader) throws TweedDataReadException {
TweedDataToken token = reader.readToken();
if (!token.isMapStart()) {
throw TweedDataReadException.builder().message("Expected map but got " + token).build();
}
visitor.visitMapStart();
while (true) {
token = reader.peekToken();
if (token.isMapEnd()) {
reader.readToken();
visitor.visitMapEnd();
break;
} else if (token.isMapEntryKey()) {
visitor.visitMapEntryKey(reader.readToken().readAsString());
readValue(reader);
} else {
throw TweedDataReadException.builder().message("Expected map end or entry key but got " + token).build();
}
}
}
}