License: MIT License: Apache

Serde Compact

Macros to compact structs and enums serialized with serde.

Field names and enum tags are shortened and mapped with #[serde(rename ="")] macro trading-off serialized data external interoperability for up to 50% size reduction. Use when both serialization and deserialization happens in Rust.

```rust use serde_compact::compact; use serde::{Serialize, Deserialize};

[derive(Serialize, Deserialize, Debug)]

enum CallbackQuery { ReservationConfirmation { eventid: i32, userid: i32, ticket_type: i32 }, // ... }

[compact] // <= add before deriving Serialize

[derive(Serialize, Deserialize, PartialEq, Debug)]

enum CompactCallbackQuery { ReservationConfirmation { eventid: i32, userid: i32, ticket_type: i32 }, // ... }

fn main() { // Original serialization let s = CallbackQuery::ReservationConfirmation {eventid: 1, userid: 1, tickettype: 1}; let sers = serdejson::tostring(&s).unwrap(); asserteq!(sers, r#"{"ReservationConfirmation":{"eventid":1,"userid":1,"tickettype":1}}"#); asserteq!(ser_s.len(), 70);

// Compacted
let cs = CompactCallbackQuery::ReservationConfirmation {event_id: 1, user_id: 1, ticket_type: 1};
let ser_cs = serde_json::to_string(&cs).unwrap();
assert_eq!(ser_cs, r#"{"a":{"b":1,"d":1,"c":1}}"#);
assert_eq!(ser_cs.len(), 25);

let de: CompactCallbackQuery = serde_json::from_str(&ser_cs).unwrap();
assert_eq!(cs, de);

} ```