| 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 |
| } |
| } |