use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct ApiErrorResponse {
#[serde(rename = "errorCode")]
pub error_code: String,
pub message: String,
pub detail: Option<String>,
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RobloxUser {
pub id: u64,
pub username: String,
#[serde(rename = "displayName")]
pub display_name: String,
pub description: Option<String>,
#[serde(rename = "hasVerifiedBadge")]
pub has_verified_badge: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DiscordUser {
pub id: String,
pub username: String,
pub discriminator: String,
pub avatar: Option<String>,
#[serde(rename = "globalName")]
pub global_name: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DiscordGuildMember {
pub user: DiscordUser,
pub nick: Option<String>,
pub roles: Vec<String>,
#[serde(rename = "joinedAt")]
pub joined_at: String,
#[serde(rename = "premiumSince")]
pub premium_since: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DiscordToRobloxResponse {
pub roblox: RobloxUser,
#[serde(rename = "discordId")]
pub discord_id: String,
#[serde(rename = "guildId")]
pub guild_id: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RobloxToDiscordResponse {
pub members: Vec<DiscordGuildMember>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RoleUpdate {
pub added: Vec<String>,
pub removed: Vec<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct UpdateUserResponse {
pub roles: RoleUpdate,
pub nickname: Option<String>,
#[serde(rename = "previousNickname")]
pub previous_nickname: Option<String>,
pub permissions: Option<serde_json::Value>,
}