首页 > 解决方案 > 缓冲串行输出和解析 JSON

问题描述

我是生锈的新手,正在努力解决一个问题。我正在寻找从串行读取输出并将其转换为 JSON。

下面是读取串行输出的代码部分。

match serialport::open(&port_name) {
    Ok(mut port) => {
        let mut serial_buf: Vec<u8> = vec![0; 1000];
        loop {
            match port.read(serial_buf.as_mut_slice()) {
                Ok(t) => handle_event(&serial_buf[..t]),
                Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (),
                Err(e) => print!("Port read error: {}\n", e), 
            };
        }
    }
    Err(e) => {
        println!("Failed to open \"{}\". Error: {}", port_name, e);
        ::std::process::exit(1);
    }
};

接下来将该输出传递给 serde 进行解析。然而,它得到的输出并不总是完整的 JSON 字符串,因此 serde 会中断。我相信我需要在这里缓冲响应,但努力适应它。

fn handle_event(buf: &[u8]) {
    let e_str = match str::from_utf8(buf) {
        Ok(v) => v,
        Err(e) => { print!("Str conversion error: {}\n", e); return; }, 
    };

    let e = match serde_json::from_str::<Event>(e_str) {
        Ok(e) => e,
        Err(e) => { print!("JSON parse error: {}\n", e); return; },
    };

    print!("{}", e.name);
}

提前感谢您的帮助。

标签: rustserde

解决方案


推荐阅读