ser refactored to use parametrized bipackSink (to use with any type of sink, e.g. network, nostd (rings, fixed buffers, etc.)
This commit is contained in:
		
							parent
							
								
									8bba1ef943
								
							
						
					
					
						commit
						c1b1cceaa1
					
				@ -188,32 +188,7 @@ impl<'x> BipackSource for SliceSource<'x> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct VecSource {
 | 
					
 | 
				
			||||||
    data: Vec<u8>,
 | 
					 | 
				
			||||||
    position: usize,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl VecSource {
 | 
					 | 
				
			||||||
    pub fn from(src: Vec<u8>) -> VecSource {
 | 
					 | 
				
			||||||
        VecSource { data: src, position: 0 }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl BipackSource for VecSource {
 | 
					 | 
				
			||||||
    fn get_u8(self: &mut Self) -> Result<u8> {
 | 
					 | 
				
			||||||
        if self.position >= self.data.len() {
 | 
					 | 
				
			||||||
            Err(NoDataError)
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            let result = self.data[self.position];
 | 
					 | 
				
			||||||
            self.position += 1;
 | 
					 | 
				
			||||||
            Ok(result)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn eof(self: &Self) -> bool {
 | 
					 | 
				
			||||||
        self.data.len() <= self.position
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/ser.rs
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/ser.rs
									
									
									
									
									
								
							@ -3,9 +3,9 @@ use serde::{ser, Serialize};
 | 
				
			|||||||
use crate::bipack_sink::{BipackSink, IntoU64};
 | 
					use crate::bipack_sink::{BipackSink, IntoU64};
 | 
				
			||||||
use crate::error::{Error, Result};
 | 
					use crate::error::{Error, Result};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Serializer {
 | 
					pub struct Serializer<S: BipackSink> {
 | 
				
			||||||
    // This string starts empty and JSON is appended as values are serialized.
 | 
					    // This string starts empty and JSON is appended as values are serialized.
 | 
				
			||||||
    output: Vec<u8>,
 | 
					    output: S,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn to_bytes<T>(value: &T) -> Result<Vec<u8>>
 | 
					pub fn to_bytes<T>(value: &T) -> Result<Vec<u8>>
 | 
				
			||||||
@ -16,7 +16,7 @@ pub fn to_bytes<T>(value: &T) -> Result<Vec<u8>>
 | 
				
			|||||||
    Ok(serializer.output)
 | 
					    Ok(serializer.output)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::Serializer for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::Serializer for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
    type SerializeSeq = Self;
 | 
					    type SerializeSeq = Self;
 | 
				
			||||||
@ -202,7 +202,7 @@ impl<'a> ser::Serializer for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeSeq for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeSeq for &'a mut Serializer<S> {
 | 
				
			||||||
    // Must match the `Ok` type of the serializer.
 | 
					    // Must match the `Ok` type of the serializer.
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    // Must match the `Error` type of the serializer.
 | 
					    // Must match the `Error` type of the serializer.
 | 
				
			||||||
@ -222,7 +222,7 @@ impl<'a> ser::SerializeSeq for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeTuple for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeTuple for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -238,7 +238,7 @@ impl<'a> ser::SerializeTuple for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeTupleStruct for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeTupleStruct for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -254,7 +254,7 @@ impl<'a> ser::SerializeTupleStruct for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeTupleVariant for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeTupleVariant for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -270,7 +270,7 @@ impl<'a> ser::SerializeTupleVariant for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeMap for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeMap for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -306,7 +306,7 @@ impl<'a> ser::SerializeMap for &'a mut Serializer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Structs are like maps in which the keys are constrained to be compile-time
 | 
					// Structs are like maps in which the keys are constrained to be compile-time
 | 
				
			||||||
// constant strings.
 | 
					// constant strings.
 | 
				
			||||||
impl<'a> ser::SerializeStruct for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeStruct for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -322,7 +322,7 @@ impl<'a> ser::SerializeStruct for &'a mut Serializer {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> ser::SerializeStructVariant for &'a mut Serializer {
 | 
					impl<'a, S: BipackSink> ser::SerializeStructVariant for &'a mut Serializer<S> {
 | 
				
			||||||
    type Ok = ();
 | 
					    type Ok = ();
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user