Annotation For src/utils.rs
Logged in as anonymous

Origin for each line in src/utils.rs from check-in 1c10bccb4e:

f5ed284f8c 2025-06-21        arcade: use crate::Cursor;
f5ed284f8c 2025-06-21        arcade: 
1c10bccb4e 2026-01-18        arcade: use std::borrow::Cow;
1c10bccb4e 2026-01-18        arcade: 
1c10bccb4e 2026-01-18        arcade: use html_escape::encode_text;
f5ed284f8c 2025-06-21        arcade: use lazy_static::lazy_static;
f5ed284f8c 2025-06-21        arcade: use regex::Regex;
d87e80b9be 2026-01-12        arcade: use stacked_errors::{
d87e80b9be 2026-01-12        arcade: 	bail,
d87e80b9be 2026-01-12        arcade: 	Result,
d87e80b9be 2026-01-12        arcade: };
f5ed284f8c 2025-06-21        arcade: 
f5ed284f8c 2025-06-21        arcade: lazy_static! {
f5ed284f8c 2025-06-21        arcade: 	pub static ref RE_DOMAIN: Regex = Regex::new(r"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$").unwrap();
1c10bccb4e 2026-01-18        arcade: 	pub static ref RE_CLOSING: Regex = Regex::new(r"</[ \t]*(pre|code)[ \t]*>").unwrap();
f5ed284f8c 2025-06-21        arcade: }
f5ed284f8c 2025-06-21        arcade: 
f5ed284f8c 2025-06-21        arcade: /// `Attachment` object to store number attachment data and corresponding file name
f5ed284f8c 2025-06-21        arcade: #[derive(Debug)]
f5ed284f8c 2025-06-21        arcade: pub struct Attachment {
f5ed284f8c 2025-06-21        arcade: 	pub data: Cursor<Vec<u8>>,
f5ed284f8c 2025-06-21        arcade: 	pub name: String,
d87e80b9be 2026-01-12        arcade: }
d87e80b9be 2026-01-12        arcade: 
1c10bccb4e 2026-01-18        arcade: /// Pass any text here to be validated as not breaking from Telegram preformatted blocks
1c10bccb4e 2026-01-18        arcade: /// escape all HTML chars afterwards
1c10bccb4e 2026-01-18        arcade: pub fn validate (text: &str) -> Result<Cow<'_, str>> {
1c10bccb4e 2026-01-18        arcade: 	if RE_CLOSING.is_match(text) {
1c10bccb4e 2026-01-18        arcade: 		bail!("Telegram closing tag found.");
1c10bccb4e 2026-01-18        arcade: 	} else {
1c10bccb4e 2026-01-18        arcade: 		Ok(encode_text(text))
1c10bccb4e 2026-01-18        arcade: 	}
f5ed284f8c 2025-06-21        arcade: }