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

serde_scan

轻松从标准输入反序列化值

7个不稳定版本

使用旧的Rust 2015

0.4.1 2020年12月2日
0.4.0 2020年11月23日
0.3.2 2018年12月8日
0.2.0 2018年11月21日
0.1.0 2017年8月3日

#819 in 编码

Download history 89/week @ 2024-04-06 160/week @ 2024-04-13 116/week @ 2024-04-20 146/week @ 2024-04-27 141/week @ 2024-05-04 154/week @ 2024-05-11 171/week @ 2024-05-18 320/week @ 2024-05-25 116/week @ 2024-06-01 103/week @ 2024-06-08 158/week @ 2024-06-15 101/week @ 2024-06-22 47/week @ 2024-06-29 126/week @ 2024-07-06 140/week @ 2024-07-13 94/week @ 2024-07-20

416 次每月下载
tm-interpreter 中使用

MIT/Apache

25KB
682

serde_scan

轻松将空白分隔的数据反序列化到serde支持的任何Rust数据结构中。适用于演示、编程竞赛等。

当前问题

  • 不支持具有结构变体的枚举
  • 结构体或元组不能包含无界容器,如 VecHashMap

示例

    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));
    }

依赖项

~110–345KB