1use std::path::Path;
4
5use prost::Message;
6
7use crate::ModelProto;
8
9#[derive(Debug)]
11pub enum Error {
12 Io(std::io::Error),
14
15 Decode(prost::DecodeError),
17
18 Encode(prost::EncodeError),
20}
21
22pub fn open_model<P: AsRef<Path>>(path: P) -> Result<ModelProto, Error> {
24 let body = std::fs::read(path).map_err(|e| Error::Io(e))?;
25 ModelProto::decode(body.as_slice()).map_err(|e| Error::Decode(e))
26}
27
28pub fn save_model<P: AsRef<Path>>(path: P, model: &ModelProto) -> Result<(), Error> {
30 let mut body = Vec::new();
31 model.encode(&mut body).map_err(|e| Error::Encode(e))?;
32 std::fs::write(path, body).map_err(|e| Error::Io(e))?;
33 Ok(())
34}