diff --git a/src/client.rs b/src/client.rs index 1a5ad10..b603e74 100644 --- a/src/client.rs +++ b/src/client.rs @@ -48,6 +48,11 @@ impl Client { self.execute(Command::SetActivity, SetActivityArgs::new(f), None) } + #[cfg(feature = "rich_presence")] + pub fn clear_activity(&mut self) -> Result> { + self.execute(Command::SetActivity, SetActivityArgs::default(), None) + } + pub fn subscribe(&mut self, evt: Event, f: F) -> Result> where F: FnOnce(SubscriptionArgs) -> SubscriptionArgs { diff --git a/src/models/rich_presence.rs b/src/models/rich_presence.rs index 436a6c2..867871f 100644 --- a/src/models/rich_presence.rs +++ b/src/models/rich_presence.rs @@ -1,5 +1,7 @@ #![cfg(feature = "rich_presence")] +use std::default::Default; + use super::shared::PartialUser; use utils; @@ -7,14 +9,22 @@ use utils; #[derive(Debug, PartialEq, Deserialize, Serialize)] pub struct SetActivityArgs { pid: i32, - activity: Activity, + + #[serde(skip_serializing_if = "Option::is_none")] + activity: Option, } impl SetActivityArgs { pub fn new(f: F) -> Self where F: FnOnce(Activity) -> Activity { - Self { pid: utils::pid(), activity: f(Activity::new()) } + Self { pid: utils::pid(), activity: Some(f(Activity::new())) } + } +} + +impl Default for SetActivityArgs { + fn default() -> Self { + Self { pid: utils::pid(), activity: None } } }