1use std::io;
2
3use crate::{
4 error::{AnyError, IoResult, SuccessResult},
5 position::Position,
6};
7
8macro_rules! decl_write_primitive {
9 ($type: ident, $ser_func: ident) => {
10 fn $ser_func(&mut self, write: &mut W, value: &$type) -> IoResult;
11 };
12}
13
14pub trait WriteFormatter<W: io::Write> {
15 fn write_struct_begin(&mut self, write: &mut W, name: &str, fields: usize) -> IoResult;
16 fn write_struct_end(&mut self, write: &mut W, name: &str) -> IoResult;
17
18 fn write_collection_begin(&mut self, write: &mut W, name: &str, size: usize) -> IoResult;
19 fn write_collection_end(&mut self, write: &mut W, name: &str) -> IoResult;
20
21 fn write_field_assignnment_begin(&mut self, write: &mut W) -> IoResult;
22 fn write_field_key(&mut self, write: &mut W, name: &str) -> IoResult;
23 fn write_field_assignnment_operator(&mut self, write: &mut W) -> IoResult;
24 fn write_field_assignnment_end(&mut self, write: &mut W, pos: &Position) -> IoResult;
25
26 decl_write_primitive!(i8, write_i8);
27 decl_write_primitive!(i16, write_i16);
28 decl_write_primitive!(i32, write_i32);
29 decl_write_primitive!(i64, write_i64);
30 decl_write_primitive!(i128, write_i128);
31 decl_write_primitive!(u8, write_u8);
32 decl_write_primitive!(u16, write_u16);
33 decl_write_primitive!(u32, write_u32);
34 decl_write_primitive!(u64, write_u64);
35 decl_write_primitive!(u128, write_u128);
36 decl_write_primitive!(f32, write_f32);
37 decl_write_primitive!(f64, write_f64);
38 decl_write_primitive!(usize, write_usize);
39 decl_write_primitive!(isize, write_isize);
40 decl_write_primitive!(str, write_str);
41}
42
43macro_rules! decl_read_primitive {
44 ($ttype: ident, $des_func: ident) => {
45 fn $des_func(&mut self, read: &mut R) -> Result<$ttype, AnyError>;
46 };
47}
48
49pub trait ReadFormatter<R: io::Read + io::Seek> {
50 fn read_struct_begin(&mut self, read: &mut R, name: &str, fields: usize) -> SuccessResult;
51 fn read_struct_end(&mut self, read: &mut R, name: &str) -> SuccessResult;
52
53 fn read_vec_begin(&mut self, read: &mut R, name: &str) -> SuccessResult;
54 fn read_vec_end(&mut self, read: &mut R, name: &str) -> SuccessResult;
55
56 fn read_field_assignnment_begin(&mut self, read: &mut R) -> SuccessResult;
57 fn read_field_key(&mut self, read: &mut R, name: &str) -> SuccessResult;
58 fn read_field_assignnment_operator(&mut self, read: &mut R) -> SuccessResult;
59 fn read_field_assignnment_end(&mut self, read: &mut R) -> SuccessResult;
60
61 decl_read_primitive!(i8, read_i8);
62 decl_read_primitive!(i16, read_i16);
63 decl_read_primitive!(i32, read_i32);
64 decl_read_primitive!(i64, read_i64);
65 decl_read_primitive!(i128, read_i128);
66 decl_read_primitive!(u8, read_u8);
67 decl_read_primitive!(u16, read_u16);
68 decl_read_primitive!(u32, read_u32);
69 decl_read_primitive!(u64, read_u64);
70 decl_read_primitive!(f32, read_f32);
71 decl_read_primitive!(f64, read_f64);
72 decl_read_primitive!(u128, read_u128);
73 decl_read_primitive!(usize, read_usize);
74 decl_read_primitive!(isize, read_isize);
75 decl_read_primitive!(String, read_string);
76}