mirror of https://git.sr.ht/~stygianentity/bincode
add encoded_size function
This commit is contained in:
parent
97e675ac06
commit
89a6b007b1
12
src/lib.rs
12
src/lib.rs
|
|
@ -66,3 +66,15 @@ pub fn decode_from<R: Buffer, T: Decodable>(r: &mut R, size_limit: SizeLimit) ->
|
||||||
DecodingResult<T> {
|
DecodingResult<T> {
|
||||||
Decodable::decode(&mut reader::DecoderReader::new(r, size_limit))
|
Decodable::decode(&mut reader::DecoderReader::new(r, size_limit))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Returns the size that an object would be if encoded using bincode.
|
||||||
|
///
|
||||||
|
/// This is used internally as part of the check for encode_into, but it can
|
||||||
|
/// be useful for preallocating buffers if thats your style.
|
||||||
|
pub fn encoded_size<T: Encodable>(t: &T) -> u64 {
|
||||||
|
use std::u64::MAX;
|
||||||
|
let mut size_checker = SizeChecker::new(MAX);
|
||||||
|
t.encode(&mut size_checker).ok();
|
||||||
|
size_checker.written
|
||||||
|
}
|
||||||
|
|
|
||||||
11
src/test.rs
11
src/test.rs
|
|
@ -14,6 +14,7 @@ use super::{
|
||||||
encode,
|
encode,
|
||||||
decode,
|
decode,
|
||||||
decode_from,
|
decode_from,
|
||||||
|
encoded_size,
|
||||||
DecodingError,
|
DecodingError,
|
||||||
DecodingResult
|
DecodingResult
|
||||||
};
|
};
|
||||||
|
|
@ -220,3 +221,13 @@ fn too_big_encode() {
|
||||||
assert!(encode(&"abcde", UpperBound(4)).is_err());
|
assert!(encode(&"abcde", UpperBound(4)).is_err());
|
||||||
assert!(encode(&"abcde", UpperBound(5)).is_ok());
|
assert!(encode(&"abcde", UpperBound(5)).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_encoded_size() {
|
||||||
|
assert!(encoded_size(&0u8) == 1);
|
||||||
|
assert!(encoded_size(&0u16) == 2);
|
||||||
|
assert!(encoded_size(&0u32) == 4);
|
||||||
|
assert!(encoded_size(&0u64) == 8);
|
||||||
|
|
||||||
|
assert!(encoded_size(&vec![0u32, 1u32, 2u32]) == 8 + 3 * (4))
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ pub struct EncoderWriter<'a, W: 'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SizeChecker {
|
pub struct SizeChecker {
|
||||||
size_limit: u64,
|
pub size_limit: u64,
|
||||||
written: u64
|
pub written: u64
|
||||||
}
|
}
|
||||||
|
|
||||||
fn wrap_io(err: IoError) -> EncodingError {
|
fn wrap_io(err: IoError) -> EncodingError {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue