speedrun_api/types/
users.rs

1use serde::Deserialize;
2
3use crate::api::users::UserId;
4
5use super::{Link, Names};
6
7#[derive(Debug, Clone, PartialEq, Deserialize)]
8#[serde(rename_all = "kebab-case")]
9pub struct User<'a> {
10    pub id: UserId<'a>,
11    pub names: Names,
12    pub pronouns: Option<String>,
13    pub weblink: String,
14    pub name_style: NameStyle,
15    pub role: UserRole,
16    pub signup: Option<String>,
17    pub location: Option<Location>,
18    pub twitch: Option<BasicLink>,
19    pub hitbox: Option<BasicLink>,
20    pub youtube: Option<BasicLink>,
21    pub twitter: Option<BasicLink>,
22    pub speedrunslive: Option<BasicLink>,
23    pub links: Vec<Link>,
24}
25
26#[derive(Debug, Clone, PartialEq, Deserialize)]
27#[serde(rename_all = "kebab-case")]
28#[serde(tag = "style")]
29pub enum NameStyle {
30    Solid {
31        color: Color,
32    },
33    #[serde(rename_all = "kebab-case")]
34    Gradient {
35        color_from: Color,
36        color_to: Color,
37    },
38}
39
40#[derive(Debug, Clone, PartialEq, Deserialize)]
41#[serde(rename_all = "kebab-case")]
42pub enum UserRole {
43    Banned,
44    User,
45    Trusted,
46    Moderator,
47    Admin,
48    Programmer,
49}
50
51#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
52#[serde(rename_all = "kebab-case")]
53pub struct Color {
54    pub light: String,
55    pub dark: String,
56}
57
58#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
59#[serde(rename_all = "kebab-case")]
60pub struct Location {
61    pub country: Place,
62    pub region: Option<Place>,
63}
64
65#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
66#[serde(rename_all = "kebab-case")]
67pub struct Place {
68    pub code: String,
69    pub names: Names,
70}
71
72#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
73#[serde(rename_all = "kebab-case")]
74pub struct BasicLink {
75    pub uri: String,
76}