feat: ported protobuf decoder

This commit is contained in:
Savely Savianok
2025-03-17 13:37:12 +03:00
parent ba4b8cc29e
commit fb6ece773c
5 changed files with 10 additions and 37 deletions

View File

@@ -1,27 +0,0 @@
import JSBI from "jsbi";
export function interpretAsSignedType(n) {
// see https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wire_format_lite.h#L857-L876
// however, this is a simpler equivalent formula
const isEven = JSBI.equal(JSBI.bitwiseAnd(n, JSBI.BigInt(1)), JSBI.BigInt(0));
if (isEven) {
return JSBI.divide(n, JSBI.BigInt(2));
} else {
return JSBI.multiply(
JSBI.BigInt(-1),
JSBI.divide(JSBI.add(n, JSBI.BigInt(1)), JSBI.BigInt(2))
);
}
}
export function interpretAsTwosComplement(n, bits) {
const isTwosComplement = JSBI.equal(
JSBI.signedRightShift(n, JSBI.BigInt(bits - 1)),
JSBI.BigInt(1)
);
if (isTwosComplement) {
return JSBI.subtract(n, JSBI.leftShift(JSBI.BigInt(1), JSBI.BigInt(bits)));
} else {
return n;
}
}

View File

@@ -72,7 +72,6 @@ export const TYPES = {
export function decodeProto(buffer) {
const reader = new BufferReader(buffer);
const parts = [];
reader.trySkipGrpcHeader();
try {
@@ -108,6 +107,7 @@ export function decodeProto(buffer) {
}
} catch (err) {
reader.resetToCheckpoint();
console.log(err);
}
return {

View File

@@ -1,6 +1,5 @@
"use bigint"
export function decodeVarint(buffer, offset) {
let res = BigInt(0);
let res = this.BigInt(0);
let shift = 0;
let byte = 0;
@@ -10,11 +9,12 @@ export function decodeVarint(buffer, offset) {
}
byte = buffer[offset++];
console.log(this)
const multiplier = exponentiate(BigInt(2), BigInt(shift));
const thisByteValue = multiply(BigInt(byte & 0x7f), multiplier);
const multiplier = this.BigInt(2) ** this.BigInt(shift);
const thisByteValue = this.BigInt(byte & 0x7f) * multiplier;
shift += 7;
res = add(res, thisByteValue);
res = res + thisByteValue;
} while (byte >= 0x80);
return {