1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
use crate::write_7_bit_encoded_i32::Write7BitEncodedI32Ext;
use std::io;

pub trait WriteCsStrExt {
	fn write_cs_string(&mut self, n: &str) -> io::Result<()>;
}

impl<T: io::Write> WriteCsStrExt for T {
	fn write_cs_string(&mut self, n: &str) -> io::Result<()> {
		self.write_7_bit_encoded_i32(n.len() as i32)?;
		self.write_all(n.as_bytes())
	}
}

#[cfg(test)]
mod tests {
	use super::*;
	use crate::write_byte_vec::WriteByteVec;

	#[test]
	fn reading_cs_strings() {
		let mut vec = Vec::with_capacity(580);
		let mut writer = WriteByteVec::new(&mut vec);
		writer.write_cs_string("").unwrap();
		writer.write_cs_string("a").unwrap();
		writer.write_cs_string("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").unwrap();
		writer.write_cs_string("📮").unwrap();
		writer
			.write_cs_string(
				"🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️",
			)
			.unwrap();

		assert_eq!(
			vec,
			[
				0x00, 0x01, 0x61, 0x80, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x04, 0xf0, 0x9f, 0x93, 0xae,
				0xb8, 0x02, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8,
				0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
				0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0,
				0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f,
				0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f,
				0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4,
				0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2,
				0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80,
				0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d,
				0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2,
				0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98,
				0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0,
				0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef,
				0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8,
				0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
				0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0,
				0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f,
				0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f,
				0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4,
				0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2,
				0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80,
				0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d,
				0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
			]
		);
	}
}