use serde::Deserialize; use crate::database::{BoardRow, Database, Error}; #[derive(Debug, Deserialize)] pub struct Emboard { guildName: String, leaderboard: Vec, } #[derive(Debug, Deserialize)] pub struct EmboardRow { guildId: String, discordId: String, points: String, username: String, } pub fn import(db: &Database, json: String) { let embaord: Emboard = match serde_json::from_str(&json) { Ok(e) => e, Err(e) => { panic!("{e}"); } }; let Some(first) = embaord.leaderboard.first() else { return; }; let guild_id = u64::from_str_radix(&first.guildId, 10).unwrap(); if db.get_leaderboard(guild_id).is_err() { db.create_leaderboard(guild_id).unwrap(); } for user in embaord.leaderboard { let user_id = u64::from_str_radix(&user.discordId, 10).unwrap(); let points = i64::from_str_radix(&user.points, 10).unwrap(); let res = db.give_user_points(guild_id, user_id, points); if let Err(Error::UserNotExist) = res { db.add_user_to_leaderboard( guild_id, BoardRow { user_id, user_handle: user.username, user_nickname: None, points, }, ) .unwrap(); } } }