use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum InstancePrivacy {
Public,
#[serde(rename = "hidden")]
FriendsOfFriends,
Friends,
Group,
Private,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub enum InstanceRegion {
#[serde(rename = "us")]
Usa,
#[serde(rename = "usw")]
UsaWest,
#[serde(rename = "use")]
UsaEast,
#[serde(rename = "eu")]
Europe,
#[serde(rename = "jp")]
Japan,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum InstanceCreatorId {
Hidden(crate::id::User),
Friends(crate::id::User),
Private(crate::id::User),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub struct InstancePlatformUserCounter {
pub android: u16,
#[serde(rename = "standalonewindows")]
pub windows: u16,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Instance {
pub active: bool,
pub can_request_invite: bool,
pub capacity: u32,
pub full: bool,
pub id: crate::id::WorldInstance,
pub instance_id: crate::id::Instance,
#[serde(rename = "n_users")]
pub user_count: u32,
pub name: String,
#[serde(with = "either::serde_untagged_optional")]
pub owner_id: Option<either::Either<crate::id::User, crate::id::Group>>,
pub permanent: bool,
pub photon_region: InstanceRegion,
pub platforms: InstancePlatformUserCounter,
pub region: InstanceRegion,
#[serde(rename = "secureName")]
pub secure_name: String,
pub short_name: Option<String>,
pub tags: Vec<String>,
#[serde(rename = "type")]
pub privacy: InstancePrivacy,
pub world_id: crate::id::World,
#[serde(flatten, default)]
pub creator_details: Option<InstanceCreatorId>,
}