#[must_use]
pub fn extract_json_array_slice(raw: &str) -> Option<&str> {
let start = raw.find('[')?;
let end = start + raw[start..].rfind(']')?;
Some(&raw[start..=end])
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn extracts_array_wrapped_in_prose() {
assert_eq!(
extract_json_array_slice("Sure! [1, 2, 3] there you go."),
Some("[1, 2, 3]")
);
}
#[test]
fn extracts_bare_array() {
assert_eq!(extract_json_array_slice("[]"), Some("[]"));
}
#[test]
fn none_when_no_open_bracket() {
assert_eq!(extract_json_array_slice("no brackets"), None);
}
#[test]
fn none_when_no_close_bracket_after_open() {
assert_eq!(extract_json_array_slice("] then ["), None);
}
#[test]
fn none_when_only_close_bracket() {
assert_eq!(extract_json_array_slice("no open bracket]"), None);
}
}