1use std::fs::File;
4use std::io::{BufReader, BufWriter};
5use std::path::Path;
6
7use anyhow::{self, format_err};
8use bincode;
9use serde::{de::DeserializeOwned, Serialize};
10use serde_yaml;
11
12pub(crate) mod format;
13pub(crate) mod numeric;
14
15pub enum QSym2FileType {
17 Sym,
19
20 Grp,
22
23 Rep,
25
26 Chr,
28}
29
30impl QSym2FileType {
31 pub fn ext(&self) -> String {
33 match self {
34 QSym2FileType::Sym => "qsym2.sym".to_string(),
35 QSym2FileType::Grp => "qsym2.grp".to_string(),
36 QSym2FileType::Rep => "qsym2.rep".to_string(),
37 QSym2FileType::Chr => "qsym2.chr".to_string(),
38 }
39 }
40}
41
42pub fn read_qsym2_binary<T, P: AsRef<Path>>(
53 name: P,
54 file_type: QSym2FileType,
55) -> Result<T, anyhow::Error>
56where
57 T: DeserializeOwned,
58{
59 let mut path = name.as_ref().to_path_buf();
60 path.set_extension(file_type.ext());
61 let mut reader = BufReader::new(File::open(path).map_err(|err| format_err!(err))?);
62 bincode::deserialize_from(&mut reader).map_err(|err| format_err!(err))
63}
64
65pub fn write_qsym2_binary<T, P: AsRef<Path>>(
76 name: P,
77 file_type: QSym2FileType,
78 value: &T,
79) -> Result<(), anyhow::Error>
80where
81 T: Serialize,
82{
83 let mut path = name.as_ref().to_path_buf();
84 path.set_extension(file_type.ext());
85 let mut writer = BufWriter::new(File::create(path)?);
86 bincode::serialize_into(&mut writer, value).map_err(|err| format_err!(err))
87}
88
89pub fn read_qsym2_yaml<T, P: AsRef<Path>>(name: P) -> Result<T, anyhow::Error>
99where
100 T: DeserializeOwned,
101{
102 let mut reader = BufReader::new(File::open(name).map_err(|err| format_err!(err))?);
103 serde_yaml::from_reader(&mut reader).map_err(|err| format_err!(err))
104}
105
106pub fn write_qsym2_yaml<T, P: AsRef<Path>>(name: P, value: &T) -> Result<(), anyhow::Error>
117where
118 T: Serialize,
119{
120 let mut path = name.as_ref().to_path_buf();
121 path.set_extension("yml");
122 let mut writer = BufWriter::new(File::create(path)?);
123 serde_yaml::to_writer(&mut writer, value).map_err(|err| format_err!(err))
124}