blob: 4fc8ba2ce80690a45eca75bc0b324e33ecb8afd6 [file] [log] [blame]
use crate::rt::compute_raw_varint64_size;
/// Helper trait implemented by integer types which could be encoded as varint.
pub(crate) trait ProtobufVarint {
/// Size of self when encoded as varint.
fn len_varint(&self) -> u64;
}
impl ProtobufVarint for u64 {
fn len_varint(&self) -> u64 {
compute_raw_varint64_size(*self)
}
}
impl ProtobufVarint for u32 {
fn len_varint(&self) -> u64 {
(*self as u64).len_varint()
}
}
impl ProtobufVarint for i64 {
fn len_varint(&self) -> u64 {
// same as length of u64
(*self as u64).len_varint()
}
}
impl ProtobufVarint for i32 {
fn len_varint(&self) -> u64 {
// sign-extend and then compute
(*self as i64).len_varint()
}
}
impl ProtobufVarint for bool {
fn len_varint(&self) -> u64 {
1
}
}