use once_cell::sync::Lazy; use rand::SeedableRng; use rand::seq::IndexedRandom; use rand_chacha::ChaCha20Rng; static STRINGS_TIPS: Lazy> = Lazy::new(|| { let json = include_str!("strings/tips.json"); let strings: Vec = serde_json::from_str(json).expect("Failed to parse strings/tips.json strings"); assert_ne!(strings.len(), 0, "No strings found in strings/tips.json"); strings }); pub fn get_string_tips(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_TIPS .choose(&mut rng) .expect("Failed to choose a random string from tips"); message.replace("{prefix}", prefix) } static STRINGS_CALL_ANSWERED: Lazy> = Lazy::new(|| { let json = include_str!("strings/call-answered.json"); let strings: Vec = serde_json::from_str(json).expect("Failed to parse strings/call-answered.json strings"); assert_ne!( strings.len(), 0, "No strings found in strings/call-answered.json" ); strings }); pub fn get_string_call_answered(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_CALL_ANSWERED .choose(&mut rng) .expect("Failed to choose a random string from call answered strings"); message.replace("{prefix}", prefix) } static STRINGS_CALL_SEARCHING: Lazy> = Lazy::new(|| { let json = include_str!("strings/call-searching.json"); let strings: Vec = serde_json::from_str(json).expect("Failed to parse strings/call-searching.json strings"); assert_ne!( strings.len(), 0, "No strings found in strings/call-searching.json" ); strings }); pub fn get_string_call_searching(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_CALL_SEARCHING .choose(&mut rng) .expect("Failed to choose a random string from call starting strings"); message.replace("{prefix}", prefix) } static STRINGS_CALL_NO_ANSWER: Lazy> = Lazy::new(|| { let json = include_str!("strings/call-no-answer.json"); let strings: Vec = serde_json::from_str(json).expect("Failed to parse strings/call-no-answer.json strings"); assert_ne!( strings.len(), 0, "No strings found in strings/call-no-answer.json" ); strings }); pub fn get_string_call_no_answer(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_CALL_NO_ANSWER .choose(&mut rng) .expect("Failed to choose a random string from call no answer strings"); message.replace("{prefix}", prefix) } static STRINGS_CALL_HANGUP_THIS_PARTY: Lazy> = Lazy::new(|| { let json = include_str!("strings/call-hangup-this-party.json"); let strings: Vec = serde_json::from_str(json) .expect("Failed to parse strings/call-hangup-this-party.json strings"); assert_ne!( strings.len(), 0, "No strings found in strings/call-hangup-this-party.json" ); strings }); pub fn get_string_call_hangup_this_party(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_CALL_HANGUP_THIS_PARTY .choose(&mut rng) .expect("Failed to choose a random string from call hangup this party strings"); message.replace("{prefix}", prefix) } static STRINGS_CALL_HANGUP_OTHER_PARTY: Lazy> = Lazy::new(|| { let json = include_str!("strings/call-hangup-other-party.json"); let strings: Vec = serde_json::from_str(json) .expect("Failed to parse strings/call-hangup-other-party.json strings"); assert_ne!( strings.len(), 0, "No strings found in strings/call-hangup-other-party.json" ); strings }); pub fn get_string_call_hangup_other_party(prefix: &str) -> String { let mut rng = ChaCha20Rng::from_os_rng(); let message = STRINGS_CALL_HANGUP_OTHER_PARTY .choose(&mut rng) .expect("Failed to choose a random string from call hangup other party strings"); message.replace("{prefix}", prefix) }