use crate::client::Client;
use crate::error::ApiError;
const ENDPOINT_URL: &str = "/v1/guild_details";
#[derive(Debug, Deserialize, PartialEq)]
pub struct Guild {
#[serde(rename = "guild_id")]
id: String,
#[serde(rename = "guild_name")]
name: String,
tag: String,
#[serde(default)]
emblem: Option<Emblem>,
}
#[derive(Debug, Deserialize, PartialEq)]
pub enum Flag {
FlipBackgroundHorizontal,
FlipBackgroundVertical,
FlipForegroundHorizontal,
FlipForegroundVertical,
}
#[derive(Debug, Deserialize, PartialEq)]
pub struct Emblem {
background_id: u32,
foreground_id: u32,
flags: Vec<Flag>,
background_color_id: u32,
foreground_primary_color_id: u32,
foreground_secondary_color_id: u32,
}
impl Guild {
pub fn get_by_id(client: &Client, id: String) -> Result<Guild, ApiError> {
let url = format!("{}?guild_id={}", ENDPOINT_URL, id);
client.request(&url)
}
pub fn get_by_name(client: &Client, name: String) -> Result<Guild, ApiError> {
let url = format!("{}?guild_name={}", ENDPOINT_URL, name);
client.request(&url)
}
pub fn id(&self) -> &str {
&self.id
}
pub fn name(&self) -> &str {
&self.name
}
pub fn tag(&self) -> &str {
&self.tag
}
pub fn emblem(&self) -> &Option<Emblem> {
&self.emblem
}
}
impl Emblem {
pub fn background_id(&self) -> u32 {
self.background_id
}
pub fn foreground_id(&self) -> u32 {
self.background_id
}
pub fn flags(&self) -> &Vec<Flag> {
&self.flags
}
pub fn background_color_id(&self) -> u32 {
self.background_color_id
}
pub fn foreground_primary_color_id(&self) -> u32 {
self.foreground_primary_color_id
}
pub fn background_primary_color_id(&self) -> u32 {
self.foreground_secondary_color_id
}
}
#[cfg(test)]
mod tests {
use crate::v1::guild_details::*;
use crate::client::Client;
const JSON_GUILD: &str = r#"
{
"guild_id": "75FD83CF-0C45-4834-BC4C-097F93A487AF",
"guild_name": "Veterans Of Lions Arch",
"tag": "LA",
"emblem": {
"background_id": 27,
"foreground_id": 114,
"flags": [],
"background_color_id": 11,
"foreground_primary_color_id": 584,
"foreground_secondary_color_id": 64
}
}"#;
#[test]
fn create_guild() {
match serde_json::from_str::<Guild>(JSON_GUILD) {
Ok(_) => assert!(true),
Err(e) => panic!(e.to_string()),
}
}
#[test]
fn get_guild_by_id() {
let client = Client::new();
let id = "1C4EE62A-E76D-48E0-A205-D56CCC4FED2D"; assert_eq!(Guild::get_by_id(&client, id.to_string()).unwrap().id(), id)
}
#[test]
fn get_guild_by_name() {
let client = Client::new();
let name = "The Doppelgangers";
assert_eq!(Guild::get_by_name(&client, name.to_string()).unwrap().name(), name)
}
}