1use crate::api::error::EpicAPIError;
2use crate::api::types::presence::PresenceUpdate;
3use crate::api::EpicAPI;
4
5impl EpicAPI {
6 pub async fn update_presence(
8 &self,
9 session_id: &str,
10 body: &PresenceUpdate,
11 ) -> Result<(), EpicAPIError> {
12 let url = match &self.user_data.account_id {
13 Some(id) => format!(
14 "https://presence-public-service-prod.ol.epicgames.com/presence/api/v1/_/{}/presence/{}",
15 id, session_id
16 ),
17 None => return Err(EpicAPIError::InvalidCredentials),
18 };
19 let parsed_url = url::Url::parse(&url).map_err(|_| EpicAPIError::InvalidParams)?;
20 let response = self
21 .set_authorization_header(self.client.patch(parsed_url))
22 .json(body)
23 .send()
24 .await
25 .map_err(|e| {
26 log::error!("{:?}", e);
27 EpicAPIError::NetworkError(e)
28 })?;
29 if response.status() == reqwest::StatusCode::OK
30 || response.status() == reqwest::StatusCode::NO_CONTENT
31 {
32 Ok(())
33 } else {
34 let status = response.status();
35 let body = response.text().await.unwrap_or_default();
36 log::warn!("{} result: {}", status, body);
37 Err(EpicAPIError::HttpError { status, body })
38 }
39 }
40}