#![cfg(feature = "rich_presence")] use super::shared::PartialUser; use utils; #[derive(Debug, PartialEq, Deserialize, Serialize)] pub struct SetActivityArgs { pid: i32, activity: Activity, } impl SetActivityArgs { pub fn new(f: F) -> Self where F: FnOnce(Activity) -> Activity { Self { pid: utils::pid(), activity: f(Activity::new()) } } } builder!{ActivityJoinEvent secret: String, } builder!{ActivitySpectateEvent secret: String, } builder!{ActivityJoinRequestEvent user: PartialUser, } builder!{Activity state: String, details: String, instance: bool, timestamps: ActivityTimestamps func, assets: ActivityAssets func, party: ActivityParty func, secrets: ActivitySecrets func, } builder!{ActivityTimestamps start: u32, end: u32, } builder!{ActivityAssets large_image: String, large_text: String, small_image: String, small_text: String, } builder!{ActivityParty id: u32, size: (u32, u32), } builder!{ActivitySecrets join: String, spectate: String, game: String alias = "match", } #[cfg(test)] mod tests { use super::*; use serde_json; const FULL_JSON: &'static str = r###"{ "state": "rusting", "details": "detailed", "instance": true, "timestamps": { "start": 1000, "end": 2000 }, "assets": { "large_image": "ferris", "large_text": "Ferris", "small_image": "rusting", "small_text": "Rusting..." }, "party": { "id": 1, "size": [ 3, 6 ] }, "secrets": { "join": "025ed05c71f639de8bfaa0d679d7c94b2fdce12f", "spectate": "e7eb30d2ee025ed05c71ea495f770b76454ee4e0", "match": "4b2fdce12f639de8bfa7e3591b71a0d679d7c93f" } }"###; #[test] fn test_serialize_full_activity() { let activity = Activity::new() .state("rusting") .details("detailed") .instance(true) .timestamps(|t| t .start(1000) .end(2000)) .assets(|a| a .large_image("ferris") .large_text("Ferris") .small_image("rusting") .small_text("Rusting...")) .party(|p| p .id(1) .size((3, 6))) .secrets(|s| s .join("025ed05c71f639de8bfaa0d679d7c94b2fdce12f") .spectate("e7eb30d2ee025ed05c71ea495f770b76454ee4e0") .game("4b2fdce12f639de8bfa7e3591b71a0d679d7c93f")); let json = serde_json::to_string_pretty(&activity).unwrap(); assert_eq![json, FULL_JSON]; } #[test] fn test_serialize_empty_activity() { let activity = Activity::new(); let json = serde_json::to_string(&activity).unwrap(); assert_eq![json, "{}"]; } }