lazy_db/lazy_data/
writing.rs1use std::os::unix::prelude::OsStrExt;
2
3use super::*;
4
5macro_rules! new_number {
6 (($name:ident) $type:ty = $lazy_type:expr) => {
7 pub fn $name(mut file: FileWrapper, value: $type) -> Result<(), LDBError> {
9 let bytes = value.to_be_bytes();
10 file.write(&[$lazy_type.into()])?;
11 file.write(&bytes)?;
12 Ok(())
13 }
14 };
15
16 (signed ($name:ident) $type:ty = $lazy_type:expr) => {
17 pub fn $name(mut file: FileWrapper, value: $type) -> Result<(), LDBError> {
19 let bytes = value.to_be_bytes();
20 file.write(&[$lazy_type.into()])?;
21 file.write(&bytes)?;
22 Ok(())
23 }
24 };
25}
26
27macro_rules! new_array {
28 (($name:ident) $type:ty = $lazy_type:ident) => {
29 pub fn $name(mut file: FileWrapper, value: &[$type]) -> Result<(), LDBError> {
31 file.write(&[LazyType::Array.into(), LazyType::$lazy_type.into()])?;
32 for i in value {
33 let bytes = i.to_be_bytes();
34 file.write(&bytes)?;
35 }
36 Ok(())
37 }
38 }
39}
40
41impl LazyData {
42 pub fn new_void(mut file: FileWrapper, _value: ()) -> Result<(), LDBError> {
44 file.write(&[LazyType::Void.into()])?;
45 Ok(())
46 }
47
48 pub fn new_string(mut file: FileWrapper, value: &str) -> Result<(), LDBError> {
50 let bytes = value.as_bytes();
51 file.write(&[LazyType::String.into()])?;
52 file.write(bytes)?;
53 Ok(())
54 }
55
56 new_number!(signed (new_i8) i8 = LazyType::I8);
58 new_number!(signed (new_i16) i16 = LazyType::I16);
59 new_number!(signed (new_i32) i32 = LazyType::I32);
60 new_number!(signed (new_i64) i64 = LazyType::I64);
61 new_number!(signed (new_i128) i128 = LazyType::I128);
62
63 new_number!((new_u8) u8 = LazyType::U8);
65 new_number!((new_u16) u16 = LazyType::U16);
66 new_number!((new_u32) u32 = LazyType::U32);
67 new_number!((new_u64) u64 = LazyType::U64);
68 new_number!((new_u128) u128 = LazyType::U128);
69
70 new_array!((new_u8_array) u8 = U8);
72 new_array!((new_u16_array) u16 = U16);
73 new_array!((new_u32_array) u32 = U32);
74 new_array!((new_u64_array) u64 = U64);
75 new_array!((new_u128_array) u128 = U128);
76 new_array!((new_i8_array) i8 = I8);
77 new_array!((new_i16_array) i16 = I16);
78 new_array!((new_i32_array) i32 = I32);
79 new_array!((new_i64_array) i64 = I64);
80 new_array!((new_i128_array) i128 = I128);
81 new_array!((new_f32_array) f32 = F32);
82 new_array!((new_f64_array) f64 = F64);
83
84 pub fn new_f32(mut file: FileWrapper, value: f32) -> Result<(), LDBError> {
88 let bytes = value.to_be_bytes();
89 file.write(&[LazyType::F32.into()])?;
90 file.write(&bytes)?;
91 Ok(())
92 }
93
94 pub fn new_f64(mut file: FileWrapper, value: f64) -> Result<(), LDBError> {
96 let bytes = value.to_be_bytes();
97 file.write(&[LazyType::F64.into()])?;
98 file.write(&bytes)?;
99 Ok(())
100 }
101
102 pub fn new_binary(mut file: FileWrapper, value: &[u8]) -> Result<(), LDBError> {
104 file.write(&[LazyType::Binary.into()])?;
105 file.write(value)
106 }
107
108 pub fn new_bool(mut file: FileWrapper, value: bool) -> Result<(), LDBError> {
110 if value {
111 file.write(&[LazyType::True.into()])
112 } else {
113 file.write(&[LazyType::False.into()])
114 }
115 }
116
117 pub fn new_link(mut file: FileWrapper, data: impl AsRef<Path>) -> Result<(), LDBError> {
119 file.write(&[LazyType::Link.into()])?;
120 file.write(data.as_ref().as_os_str().as_bytes())
121 }
122}