rconcrete 0.2.0

rconcrete is a simple tool for opening an rcon shell to a game server, such as minecraft or factorio
Documentation
use clap::ValueEnum;
use serde::{Deserialize, Serialize};
use std::fmt::Display;

use rcon::Builder;

pub mod cli;
pub mod commands;
pub mod configfile;
pub mod error;

#[derive(Clone, Serialize, Deserialize, ValueEnum)]
pub enum Quirk {
    MinecraftQuirk,
    FactorioQuirk,
}

impl Display for Quirk {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Quirk::MinecraftQuirk => f.write_fmt(format_args!("minecraft-quirk")),
            Quirk::FactorioQuirk => f.write_fmt(format_args!("factorio-quirk")),
        }
    }
}

#[derive(Serialize, Deserialize)]
pub struct Server {
    name: String,
    address: String,
    password: String,
    quirks: Vec<Quirk>,
}

impl Server {
    pub fn enable_quirks<T>(&self, mut builder: Builder<T>) -> Builder<T> {
        for quirk in self.quirks.iter() {
            match quirk {
                Quirk::MinecraftQuirk => builder = builder.enable_minecraft_quirks(true),
                Quirk::FactorioQuirk => builder = builder.enable_factorio_quirks(true),
            }
        }
        builder
    }
}