pub(crate) fn contains_pair(labels: &[&str], a: &str, b: &str) -> bool {
labels.contains(&a) && labels.contains(&b)
}
pub(crate) fn is_hs_code_format(s: &str) -> bool {
let s = s.trim();
if s.is_empty() {
return false;
}
if s.starts_with('-') || s.starts_with('+') {
return false;
}
let parts: Vec<&str> = s.split('.').collect();
match parts.len() {
1 => {
let len = parts[0].len();
(4..=10).contains(&len) && parts[0].chars().all(|c| c.is_ascii_digit())
}
2..=4 => {
parts[0].len() == 4
&& parts[0].chars().all(|c| c.is_ascii_digit())
&& parts[1..]
.iter()
.all(|p| p.len() == 2 && p.chars().all(|c| c.is_ascii_digit()))
}
_ => false,
}
}
pub(crate) fn is_isin_format(s: &str) -> bool {
let s = s.trim();
if s.len() != 12 {
return false;
}
let bytes = s.as_bytes();
if !bytes[0].is_ascii_uppercase() || !bytes[1].is_ascii_uppercase() {
return false;
}
if !bytes[2..5].iter().all(|b| b.is_ascii_digit()) {
return false;
}
if !bytes[5..11].iter().all(|b| b.is_ascii_alphanumeric()) {
return false;
}
bytes[11].is_ascii_digit()
}
pub(crate) fn is_issn_format(s: &str) -> bool {
let s = s.trim();
let bytes = s.as_bytes();
bytes.len() == 9
&& bytes[4] == b'-'
&& bytes[..4].iter().all(|b| b.is_ascii_digit())
&& bytes[5..8].iter().all(|b| b.is_ascii_digit())
&& (bytes[8].is_ascii_digit() || bytes[8] == b'X')
}