1use crate::serialize::Writer;
2
3pub fn write_varint(out: &mut impl Writer, mut value: u64) {
4 while value >= 0x80 {
5 out.write_byte((value as u8) | 0x80);
6 value >>= 7;
7 }
8 out.write_byte(value as u8);
9}
10
11pub fn write_varint_signed(out: &mut impl Writer, value: i64) {
12 let zigzag = ((value << 1) ^ (value >> 63)) as u64;
13 write_varint(out, zigzag);
14}
15
16pub fn write_varint_u128(out: &mut impl Writer, mut value: u128) {
17 while value >= 0x80 {
18 out.write_byte((value as u8) | 0x80);
19 value >>= 7;
20 }
21 out.write_byte(value as u8);
22}
23
24pub fn write_varint_signed_i128(out: &mut impl Writer, value: i128) {
25 let zigzag = ((value << 1) ^ (value >> 127)) as u128;
26 write_varint_u128(out, zigzag);
27}