pub(super) fn esc(s: &str) -> String {
s.replace('\\', "\\\\").replace('\'', "\\'")
}
pub(super) fn esc_multiline(s: &str) -> String {
esc(s)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn esc_escapes_backslash_and_quote() {
assert_eq!(esc(r"a\b'c"), r"a\\b\'c");
}
#[test]
fn esc_multiline_preserves_newlines_tabs() {
let input = "line1\nline2\twith tab\r\nend";
let out = esc_multiline(input);
assert!(out.contains('\n'), "newline must remain literal");
assert!(out.contains('\t'), "tab must remain literal");
assert!(
!out.contains("\\n"),
"must not introduce a backslash-n escape"
);
}
#[test]
fn esc_multiline_still_escapes_quotes() {
assert_eq!(esc_multiline("it's\n\"ok\""), "it\\'s\n\"ok\"");
}
}