#deserialize #serialization #serde #data-structures #scanf

serde_scan

easily deserialize values from standard input

7 unstable releases

Uses old Rust 2015

0.4.1 Dec 2, 2020
0.4.0 Nov 23, 2020
0.3.2 Dec 8, 2018
0.2.0 Nov 21, 2018
0.1.0 Aug 3, 2017

#1188 in Encoding

Download history 241/week @ 2024-10-13 231/week @ 2024-10-20 125/week @ 2024-10-27 205/week @ 2024-11-03 274/week @ 2024-11-10 200/week @ 2024-11-17 227/week @ 2024-11-24 400/week @ 2024-12-01 520/week @ 2024-12-08 503/week @ 2024-12-15 305/week @ 2024-12-22 52/week @ 2024-12-29 259/week @ 2025-01-05 537/week @ 2025-01-12 448/week @ 2025-01-19 379/week @ 2025-01-26

1,636 downloads per month
Used in tm-interpreter

MIT/Apache

25KB
682 lines

serde_scan

easily deserialize whitespace seperated data into any rust data structure supported by serde. useful for demos, programming contests, and the like.

current issues:

  • no support for enums with struct variants
  • structs or tuples cannot contain an unbounded container, like a Vec or HashMap.

examples

    extern crate serde;
    extern crate serde_scan;
    
    #[macro_use]
    extern crate serde_derive;

    #[derive(Deserialize, Debug, PartialEq)]
    struct Triple {
        a: u32,
        b: u32,
        c: u32,
    }

    #[derive(Deserialize, Debug, PartialEq)]
    enum Command {
        Q,
        Help,
        Size(usize, usize),
        Color(u8),
    }

    fn main() {
        let s = "1 2 3";

        let a: [u32; 3] = serde_scan::from_str(s).unwrap();
        assert_eq!(a, [1, 2, 3]);

        let b: (u32, u32, u32) = serde_scan::from_str(s).unwrap();
        assert_eq!(b, (1, 2, 3));

        let c: Triple = serde_scan::from_str(s).unwrap();
        assert_eq!(c, Triple { a: 1, b: 2, c: 3 });

        let s = "Size 1 2";
        let size = serde_scan::from_str(s).unwrap();
        assert_eq!(c, Command::Size(1, 2));
    }

Dependencies

~100–330KB