перенёс класс у вдругую папку Вроде всё работает и тесты проходят. И блоки добавляются все что надо для MVP
62 lines
2.3 KiB
Java
62 lines
2.3 KiB
Java
package blockchain;
|
||
|
||
import blockchain.body.*;
|
||
|
||
/**
|
||
* Парсер body выбирает класс по header: type/subType/version,
|
||
* потому что bodyBytes больше НЕ содержат type/subType/version.
|
||
*/
|
||
public final class BodyRecordParser {
|
||
|
||
private BodyRecordParser() {}
|
||
|
||
public static BodyRecord parse(short type, short subType, short version, byte[] bodyBytes) {
|
||
if (bodyBytes == null) throw new IllegalArgumentException("bodyBytes == null");
|
||
|
||
int t = type & 0xFFFF;
|
||
int v = version & 0xFFFF;
|
||
|
||
int key = (t << 16) | v;
|
||
|
||
BodyRecord r = switch (key) {
|
||
case HeaderBody.KEY -> {
|
||
int st = subType & 0xFFFF;
|
||
if (st == (HeaderBody.SUBTYPE_COMPAT & 0xFFFF)) {
|
||
yield new HeaderBody(subType, version, bodyBytes);
|
||
}
|
||
if (st == (CreateChannelBody.SUBTYPE & 0xFFFF)) {
|
||
yield new CreateChannelBody(subType, version, bodyBytes);
|
||
}
|
||
throw new IllegalArgumentException("Unknown TECH subType for type=0 ver=1: subType=" + st);
|
||
}
|
||
|
||
// TEXT type=1 ver=1: выбираем класс по subType
|
||
case TextBody.KEY -> {
|
||
int st = subType & 0xFFFF;
|
||
|
||
if (st == (MsgSubType.TEXT_POST & 0xFFFF)
|
||
|| st == (MsgSubType.TEXT_EDIT_POST & 0xFFFF)) {
|
||
yield new TextLineBody(subType, version, bodyBytes);
|
||
}
|
||
|
||
if (st == (MsgSubType.TEXT_REPLY & 0xFFFF)
|
||
|| st == (MsgSubType.TEXT_EDIT_REPLY & 0xFFFF)) {
|
||
yield new TextReplyBody(subType, version, bodyBytes);
|
||
}
|
||
|
||
throw new IllegalArgumentException("Unknown TEXT subType for type=1 ver=1: subType=" + st);
|
||
}
|
||
|
||
case ReactionBody.KEY -> new ReactionBody(subType, version, bodyBytes);
|
||
case ConnectionBody.KEY -> new ConnectionBody(subType, version, bodyBytes);
|
||
case UserParamBody.KEY -> new UserParamBody(subType, version, bodyBytes);
|
||
|
||
default -> throw new IllegalArgumentException(String.format(
|
||
"Unknown body type/version from header: type=%d ver=%d subType=%d",
|
||
t, v, (subType & 0xFFFF)
|
||
));
|
||
};
|
||
|
||
return r.check();
|
||
}
|
||
} |