use serde::Deserialize;
use tryparse::parse;
#[derive(Deserialize, Debug, PartialEq)]
struct User {
name: String,
age: u32,
}
#[test]
fn test_extraction_plus_fixing_single_quotes() {
let response = r#"
Here's the user data: {name: 'Alice', age: 30}
"#;
let parser = tryparse::parser::FlexibleParser::new();
let candidates = parser.parse(response).unwrap();
println!("Found {} candidates:", candidates.len());
for (i, candidate) in candidates.iter().enumerate() {
println!(
" Candidate {}: {:?} = {}",
i, candidate.source, candidate.value
);
}
let result: Result<User, _> = parse(response);
println!("\nResult: {:#?}", result);
assert!(result.is_ok(), "Should extract and fix single quotes");
let user = result.unwrap();
assert_eq!(user.name, "Alice");
assert_eq!(user.age, 30);
}
#[test]
fn test_extraction_plus_fixing_unquoted_keys() {
let response = r#"
The data is: {"name": "Bob", age: 25}
"#;
let result: Result<User, _> = parse(response);
println!("Result: {:#?}", result);
assert!(result.is_ok(), "Should extract and fix unquoted keys");
let user = result.unwrap();
assert_eq!(user.name, "Bob");
assert_eq!(user.age, 25);
}
#[test]
fn test_extraction_plus_fixing_both_issues() {
let response = r#"
Sure! Here's the user data: {name: 'Alice', age: 30}
Hope that helps!
"#;
let result: Result<User, _> = parse(response);
println!("Result: {:#?}", result);
assert!(result.is_ok(), "Should extract and fix multiple issues");
let user = result.unwrap();
assert_eq!(user.name, "Alice");
assert_eq!(user.age, 30);
}
#[test]
fn test_extraction_plus_fixing_trailing_comma() {
let response = r#"
Data: {"name": "Charlie", "age": 35,}
"#;
let result: Result<User, _> = parse(response);
println!("Result: {:#?}", result);
assert!(result.is_ok(), "Should extract and fix trailing comma");
let user = result.unwrap();
assert_eq!(user.name, "Charlie");
assert_eq!(user.age, 35);
}