mod.rs
1 use korni::{parse, Entry}; 2 3 #[allow(dead_code)] 4 pub fn parse_single_pair(input: &str) -> Option<(String, String)> { 5 let entries = parse(input); 6 entries.into_iter().find_map(|e| { 7 if let Entry::Pair(kv) = e { 8 Some((kv.key.to_string(), kv.value.to_string())) 9 } else { 10 None 11 } 12 }) 13 } 14 15 #[allow(dead_code)] 16 pub fn assert_pair(input: &str, expected_key: &str, expected_value: &str) { 17 let pair = 18 parse_single_pair(input).expect(&format!("Failed to parse pair from input: {:?}", input)); 19 assert_eq!(pair.0, expected_key, "Key mismatch"); 20 assert_eq!(pair.1, expected_value, "Value mismatch"); 21 } 22 23 #[allow(dead_code)] 24 pub fn assert_error(input: &str, expected_part: &str) { 25 let entries = parse(input); 26 let error = entries.iter().find_map(|e| { 27 if let Entry::Error(err) = e { 28 Some(err.to_string()) 29 } else { 30 None 31 } 32 }); 33 34 assert!( 35 error.is_some(), 36 "Expected error for input: {:?} but got success", 37 input 38 ); 39 let msg = error.unwrap(); 40 assert!( 41 msg.contains(expected_part), 42 "Error message {:?} did not contain {:?}", 43 msg, 44 expected_part 45 ); 46 } 47 48 #[allow(dead_code)] 49 pub fn assert_exported(input: &str, expected_key: &str, expected_value: &str) { 50 let entries = parse(input); 51 let kv = entries 52 .iter() 53 .find_map(|e| e.as_pair().map(|p| p.clone())) 54 .unwrap(); 55 assert_eq!(kv.key, expected_key); 56 assert_eq!(kv.value, expected_value); 57 assert!(kv.is_exported, "Expected exported flag to be true"); 58 } 59 60 #[allow(dead_code)] 61 pub fn assert_not_exported(input: &str, expected_key: &str, expected_value: &str) { 62 let entries = parse(input); 63 let kv = entries 64 .iter() 65 .find_map(|e| e.as_pair().map(|p| p.clone())) 66 .unwrap(); 67 assert_eq!(kv.key, expected_key); 68 assert_eq!(kv.value, expected_value); 69 assert!(!kv.is_exported, "Expected exported flag to be false"); 70 }