use std::collections::HashMap; enum ActionType { Normal, Default, } struct NotifAction { key: String, label: String, } struct Notif { app_name: String, replace_id: u32, ico: String, //It's string, right? summary: String, body: String, actions: Vec<(String, String)>, hints: HashMap, expir_timeout: i32, } // Summary should be generally <= 40 chars, as per the specification. fn truncate_summary(notif: &mut Notif) { if notif.summary.len() > 40 { notif.summary.truncate(39); notif.summary.push_str("…"); } } fn main() { let mut not = Notif { app_name: "snot".to_string(), replace_id: 0, ico: "alert.png".to_string(), summary: "This is a very long suuummmaaarrryyy! Don't you believe me????".to_string(), body: "short body(hehe)".to_string(), actions: vec![ ("reply".to_string(), "Reply".to_string()), ("close".to_string(), "Close".to_string()), ], hints: HashMap::new(), // Create an empty HashMap for hints expir_timeout: 0 }; not.hints.insert("urgency".to_string(), "critical".to_string()); truncate_summary(&mut not); //Limit the summary length println!("AppName: {}\nReplaceId: {}\nIcon: {}\nSummary: {}\nBody: {}\nExpirationTimeout: {}", not.app_name, not.replace_id, not.ico, not.summary, not.body, not.expir_timeout ); println!("Actions:"); for (key, label) in ¬.actions { println!("\t{}: {}, ", key, label); } println!("Hints:"); for (key, value) in not.hints.iter() { println!("\t{}: {}, ", key, value); } }