1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
pub(super) fn storage_key_belongs_to_table(storage_key: &str, table: &str) -> bool { let Some(mut fingerprint) = storage_key .strip_prefix(table) .and_then(|suffix| suffix.strip_prefix(':')) else { return false; }; if fingerprint.is_empty() { return false; } while !fingerprint.is_empty() { let Some(length_end) = fingerprint.find(':') else { return false; }; let Ok(part_length) = fingerprint[..length_end].parse::<usize>() else { return false; }; let part_start = length_end + 1; let Some(part_end) = part_start.checked_add(part_length) else { return false; }; if fingerprint.as_bytes().get(part_end) != Some(&b';') || !fingerprint.is_char_boundary(part_end + 1) { return false; } fingerprint = &fingerprint[part_end + 1..]; } true }