#parser #serialization #encode #transcode #byte

byte-transcoder

A Rust+Typescript library to transcode higher-level data types to/from bytes

6 releases

Uses new Rust 2024

new 0.0.6 Apr 2, 2025
0.0.5 Apr 2, 2025
0.0.3 Feb 22, 2025
0.0.2 Sep 25, 2024

#1592 in Encoding

Download history 3/week @ 2025-01-31 3/week @ 2025-02-07 143/week @ 2025-02-21 25/week @ 2025-02-28 1/week @ 2025-03-07 7/week @ 2025-03-14 259/week @ 2025-03-28

267 downloads per month

MIT license

16KB
237 lines

Byte Transcoder

Version Docs

JSR JSR Score

A Rust+Typescript library to transcode higher-level data types to/from bytes.

Features

Supported data types:

  • u8/u16/u32/u64
  • i8/i16/i32/i64
  • string
  • uuid

ByteReader

Wraps a byte slice ([u8] in Rust, Uint8Array in Typescript) and exposes easy-to-use retrieval functions for primitives.

Can manually specify endianness.

ByteWriter

Typescript only.

Helps write primitives to a Uint8Array.

Can manually specify endianness.

Examples

Read examples/, tests/, and src-ts/**/*.test.ts for more examples!

ByteReader

Typescript

type Payload = { gameId: string; joinCode: string };

const bytes = new Uint8Array([
  // <your binary data>
]);
const byteReader = new ByteReader(bytes);

const payload: Payload = {
  gameId: byteReader.readUuid(),
  joinCode: byteReader.readString()
};

Rust

struct Payload {
    game_id: Uuid,
    join_code: String,
}

let bytes: Vec<u8> = vec![
  // <your binary data>
];
let mut byte_reader = ByteReader::new(bytes);

let payload = Payload {
  game_id: byte_reader.read_uuid()?,
  join_code: byte_reader.read_string()?,
}

ByteWriter

Typescript

type Payload = { gameId: string; joinCode: string };
const payload: Payload = {
  gameId: "24399a6c-c4a9-4053-9b2d-4199107fb567",
  joinCode: "12345"
};

const byteWriter = new ByteWriter();
byteWriter.writeUuid(payload.gameId);
byteWriter.writeString(payload.joinCode);

const bytes: Uint8Array = byteWriter.getBytes();

Rust

There is no need for a Rust version of ByteWriter as integers types already have .to_le_bytes() and .to_be_bytes() (and .to_ne_bytes()).

Developers

Project is under active maintenance - even if there are no recent commits! Please submit an issue / bug request if the library needs updating for any reason!

Feature Requests

Support more datatypes

I have only implemented the exact functions I need for the projects that I'm currently building. If there is anything missing that you would like to see implemented, please submit a PR! Or if you're lazy, submit a Feature Request and I'll implement it lol

Commands

  • make lint
  • make test
  • make fix

Credits

Made with 🤬 and 🥲 by Todd Everett Griffin.

Dependencies

~250KB