bytes_kman/core/
result.rs1use crate::{TBuffer, TBytes};
2
3impl<T: TBytes, E: TBytes> TBytes for Result<T, E> {
4 fn size(&self) -> usize {
5 match self {
6 Ok(res) => res.size() + 1,
7 Err(err) => err.size() + 1,
8 }
9 }
10
11 fn to_bytes(&self) -> Vec<u8> {
12 let mut buffer = Vec::with_capacity(self.size());
13
14 match self {
15 Ok(res) => {
16 buffer.push(0);
17 buffer.append(&mut res.to_bytes())
18 }
19 Err(err) => {
20 buffer.push(1);
21 buffer.append(&mut err.to_bytes())
22 }
23 }
24
25 buffer
26 }
27
28 fn from_bytes(buffer: &mut TBuffer) -> Option<Self>
29 where
30 Self: Sized,
31 {
32 if buffer.is_empty() {
33 return None;
34 }
35 let mut iter = buffer.drain(0..1);
36 let variant = iter.next()?;
37 drop(iter);
38
39 match variant {
40 0 => {
41 if let Some(value) = T::from_bytes(buffer) {
42 Some(Ok(value))
43 } else {
44 buffer.insert(0, variant);
45 None
46 }
47 }
48 1 => {
49 if let Some(value) = E::from_bytes(buffer) {
50 Some(Err(value))
51 } else {
52 buffer.insert(0, variant);
53 None
54 }
55 }
56 _ => None,
57 }
58 }
59}
60
61impl TBytes for () {
62 fn size(&self) -> usize {
63 0
64 }
65
66 fn to_bytes(&self) -> Vec<u8> {
67 vec![]
68 }
69
70 fn from_bytes(_buffer: &mut TBuffer) -> Option<Self>
71 where
72 Self: Sized,
73 {
74 Some(())
75 }
76}