diff options
Diffstat (limited to 'askama_escape/src')
-rw-r--r-- | askama_escape/src/lib.rs | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/askama_escape/src/lib.rs b/askama_escape/src/lib.rs index c388f2d..ef6c1f9 100644 --- a/askama_escape/src/lib.rs +++ b/askama_escape/src/lib.rs @@ -113,21 +113,18 @@ impl Escaper for Html { { let mut last = 0; for (index, byte) in string.bytes().enumerate() { - macro_rules! go { - ($expr:expr) => {{ - fmt.write_str(&string[last..index])?; - fmt.write_str($expr)?; - last = index + 1; - }}; - } - - match byte { - b'<' => go!("<"), - b'>' => go!(">"), - b'&' => go!("&"), - b'"' => go!("""), - b'\'' => go!("'"), - _ => {} + let escaped = match byte { + b'<' => Some(&"<"), + b'>' => Some(&">"), + b'&' => Some(&"&"), + b'"' => Some(&"""), + b'\'' => Some(&"'"), + _ => None, + }; + if let Some(escaped) = escaped { + fmt.write_str(&string[last..index])?; + fmt.write_str(escaped)?; + last = index + 1; } } fmt.write_str(&string[last..]) @@ -181,20 +178,17 @@ impl std::io::Write for JsonEscapeBuffer { fn write(&mut self, bytes: &[u8]) -> std::io::Result<usize> { let mut last = 0; for (index, byte) in bytes.iter().enumerate() { - macro_rules! go { - ($expr:expr) => {{ - self.0.extend(&bytes[last..index]); - self.0.extend($expr); - last = index + 1; - }}; - } - - match byte { - b'&' => go!(br#"\u0026"#), - b'\'' => go!(br#"\u0027"#), - b'<' => go!(br#"\u003c"#), - b'>' => go!(br#"\u003e"#), - _ => {} + let escaped = match byte { + b'&' => Some(br#"\u0026"#), + b'\'' => Some(br#"\u0027"#), + b'<' => Some(br#"\u003c"#), + b'>' => Some(br#"\u003e"#), + _ => None, + }; + if let Some(escaped) = escaped { + self.0.extend(&bytes[last..index]); + self.0.extend(escaped); + last = index + 1; } } self.0.extend(&bytes[last..]); |