use std::io::Cursor;
use crate::JSONParser;
pub fn extract_json_to_string(input: &str) -> Result<String, Box<dyn std::error::Error>> {
let mut parser = JSONParser::new();
let mut buffer = Vec::new();
{
let mut writer = Cursor::new(&mut buffer);
parser.extract_json_from_stream(&mut writer, input)?;
}
Ok(String::from_utf8(buffer)?)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_extract_json_to_string_single() {
let input = "Before {\"key\":\"value\"} After";
let result = extract_json_to_string(input).unwrap();
assert_eq!(result, "{\"key\":\"value\"}");
}
#[test]
fn test_extract_json_to_string_multiple() {
let input = "Start {\"a\":1}{\"b\":2} End";
let result = extract_json_to_string(input).unwrap();
assert_eq!(result, "{\"a\":1}{\"b\":2}");
}
#[test]
fn test_extract_json_to_string_nested() {
let input = "Data: {\"outer\":{\"inner\":true}} Text";
let result = extract_json_to_string(input).unwrap();
assert_eq!(result, "{\"outer\":{\"inner\":true}}");
}
#[test]
fn test_extract_json_to_string_array() {
let input = "Array: [1,2,3] End";
let result = extract_json_to_string(input).unwrap();
assert_eq!(result, "[1,2,3]");
}
}