12 unstable releases (4 breaking)

0.6.0 Jun 13, 2024
0.5.0 May 31, 2024
0.4.2 Dec 3, 2023
0.4.1 Jul 27, 2023
0.1.3 Feb 13, 2023

#753 in Parser implementations

Download history 12/week @ 2024-10-22 16/week @ 2024-10-29 20/week @ 2024-11-05 25/week @ 2024-11-19 27/week @ 2024-11-26 21/week @ 2024-12-03 36/week @ 2024-12-10 20/week @ 2024-12-17 38/week @ 2024-12-24 4/week @ 2024-12-31 11/week @ 2025-01-07 11/week @ 2025-01-14 4/week @ 2025-01-21 59/week @ 2025-01-28 17/week @ 2025-02-04

92 downloads per month
Used in 8 crates (4 directly)

MPL-2.0 license

220KB
6K SLoC

alox-48

alox-48 (short for aluminum oxide 48) is a crate for deserializing and serializing as well Ruby's Marshal data format, using a custom data format like serde.

alox-48 intends to provide almost perfect round-trip deserialization, with some exceptions:

  • Object links are not preserved. Object links are a way for Ruby to compact data in Marshal. They rely heavily on Ruby having a GC and thus do not map well to Rust.
  • Bignum is unsupported.

Why a custom data format

Originally this crate relied on nightly to extend serde, using min_speciailization. Unfortunately that had many shortcomings and the deserializer would frequently choke on valid inputs and the serializer would spit out invalid data.

Most issues revolved around symbols- ruby uses @ prefixed symbols for instance variables, but also accepts variables without the prefix, silently discarding them.

I'm working on a separate serde adapter that can interface serde's data format with alox's, but that looks like it'll be nightly only.

Dependencies

~1.3–2.2MB
~42K SLoC