Я новичок в ржавчине и борюсь с проблемой. Я хочу прочитать вывод из последовательного порта и преобразовать его в 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);
}
};
Затем этот вывод передается в серде для анализа. Однако вывод, который он получает, не всегда является полной строкой 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);
}
Заранее спасибо за любую помощь.