disma-cli 0.9.5

Discord server management has never been easier!
use colored::Colorize;
use std::{path::Path, sync::Arc};

use crate::utils::{
    input::{abort, ask_user_confirmation},
    io::Serializer,
};
use disma::{api::params::guild::GuildParams, guild::GuildQuerier};

pub struct SaveExistingGuild {
    guild_querier: Arc<dyn GuildQuerier>,
    serializer: Arc<Serializer>,
}

impl SaveExistingGuild {
    pub fn new(guild_querier: Arc<dyn GuildQuerier>, serializer: Arc<Serializer>) -> Self {
        Self {
            guild_querier,
            serializer,
        }
    }

    pub fn run(&self, guild_id: &str, file: &str, force: bool) {
        let guild = self.guild_querier.get_guild(guild_id);

        let guild_params = GuildParams::from(&guild);
        let file_path = Path::new(file);

        println!();
        println!(
            "{}",
            format!("➜ 💾 Saving current guild config to '{file}'...").bold()
        );

        if !force && file_path.exists() {
            println!(
                "{}",
                format!("➜ ❗ A file named '{file}' already exists.").bold()
            );

            if !ask_user_confirmation("Do you still want to proceeed?") {
                abort();
            }
        }

        self.serializer.serialize(&guild_params, file_path);

        println!("{}", "➜ ✨ DONE.".bold());
    }
}