nix_compat/aterm/
escape.rs1use bstr::ByteSlice;
2
3pub fn escape_bytes<P: AsRef<[u8]>>(s: P) -> Vec<u8> {
5 let mut s: Vec<u8> = s.as_ref().to_vec();
6
7 s = s.replace(b"\\", b"\\\\");
8 s = s.replace(b"\n", b"\\n");
9 s = s.replace(b"\r", b"\\r");
10 s = s.replace(b"\t", b"\\t");
11 s = s.replace(b"\"", b"\\\"");
12
13 s
14}
15
16#[cfg(test)]
17mod tests {
18 use super::escape_bytes;
19 use rstest::rstest;
20
21 #[rstest]
22 #[case::empty(b"", b"")]
23 #[case::doublequote(b"\"", b"\\\"")]
24 #[case::colon(b":", b":")]
25 fn escape(#[case] input: &[u8], #[case] expected: &[u8]) {
26 assert_eq!(expected, escape_bytes(input))
27 }
28}