use crate::deserializer::*;
use crate::serializer::*;
use crate::structs::user::User;
use crate::structs::user::activity::Activity;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone, Builder, Default)]
#[builder(setter(into, strip_option), default)]
pub struct Presence {
#[serde(flatten)]
pub user: Option<User>,
#[serde(default)]
#[serde(deserialize_with = "deserialize_option_string_to_u64")]
#[serde(serialize_with = "serialize_option_u64_as_string")]
pub guild_id: Option<u64>,
pub status: String,
pub activities: Vec<Activity>,
pub client_status: ClientStatus,
}
#[derive(Debug, Deserialize, Serialize, Clone, Builder, Default)]
#[builder(setter(into, strip_option), default)]
pub struct ClientStatus {
pub desktop: Option<String>,
pub mobile: Option<String>,
pub web: Option<String>,
pub embedded: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Builder, Default)]
#[builder(setter(into, strip_option), default)]
pub struct MergedPresences {
pub friends: Vec<Presence>,
pub guilds: Vec<Vec<Presence>>,
}