cs_string_rw/
write_cs_string.rs

1use crate::write_7_bit_encoded_i32::Write7BitEncodedI32Ext;
2use std::io;
3
4pub trait WriteCsStrExt {
5	fn write_cs_string(&mut self, n: &str) -> io::Result<()>;
6}
7
8impl<T: io::Write> WriteCsStrExt for T {
9	fn write_cs_string(&mut self, n: &str) -> io::Result<()> {
10		self.write_7_bit_encoded_i32(n.len() as i32)?;
11		self.write_all(n.as_bytes())
12	}
13}
14
15#[cfg(test)]
16mod tests {
17	use super::*;
18	use crate::write_byte_vec::WriteByteVec;
19
20	#[test]
21	fn reading_cs_strings() {
22		let mut vec = Vec::with_capacity(580);
23		let mut writer = WriteByteVec::new(&mut vec);
24		writer.write_cs_string("").unwrap();
25		writer.write_cs_string("a").unwrap();
26		writer.write_cs_string("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").unwrap();
27		writer.write_cs_string("📮").unwrap();
28		writer
29			.write_cs_string(
30				"🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️🏴‍☠️",
31			)
32			.unwrap();
33
34		assert_eq!(
35			vec,
36			[
37				0x00, 0x01, 0x61, 0x80, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
38				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
39				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
40				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
41				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
42				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
43				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
44				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
45				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
46				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
47				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
48				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
49				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
50				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
51				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
52				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
53				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
54				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
55				0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x04, 0xf0, 0x9f, 0x93, 0xae,
56				0xb8, 0x02, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8,
57				0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
58				0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0,
59				0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f,
60				0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f,
61				0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4,
62				0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2,
63				0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80,
64				0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d,
65				0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2,
66				0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98,
67				0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0,
68				0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef,
69				0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8,
70				0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
71				0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0,
72				0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f,
73				0x8f, 0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f,
74				0xb4, 0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4,
75				0xe2, 0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2,
76				0x80, 0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80,
77				0x8d, 0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f, 0xf0, 0x9f, 0x8f, 0xb4, 0xe2, 0x80, 0x8d,
78				0xe2, 0x98, 0xa0, 0xef, 0xb8, 0x8f,
79			]
80		);
81	}
82}