swc/crates/swc_bundler/tests/.cache/untrusted/f5faaa2fb054ce150f0b2ecaae1271071009f380.ts
2021-11-09 20:42:49 +09:00

51 lines
1.2 KiB
TypeScript

// Loaded from https://raw.githubusercontent.com/deno-postgres/deno-postgres/master/connection/packet_reader.ts
import { readInt16BE, readInt32BE } from "../utils.ts";
export class PacketReader {
private offset = 0;
private decoder: TextDecoder = new TextDecoder();
constructor(private buffer: Uint8Array) {}
readInt16(): number {
const value = readInt16BE(this.buffer, this.offset);
this.offset += 2;
return value;
}
readInt32(): number {
const value = readInt32BE(this.buffer, this.offset);
this.offset += 4;
return value;
}
readByte(): number {
return this.readBytes(1)[0];
}
readBytes(length: number): Uint8Array {
const start = this.offset;
const end = start + length;
const slice = this.buffer.slice(start, end);
this.offset = end;
return slice;
}
readString(length: number): string {
const bytes = this.readBytes(length);
return this.decoder.decode(bytes);
}
readCString(): string {
const start = this.offset;
// find next null byte
const end = this.buffer.indexOf(0, start);
const slice = this.buffer.slice(start, end);
// add +1 for null byte
this.offset = end + 1;
return this.decoder.decode(slice);
}
}