asterion 0.3.5

Find your way out of a dangeroussh labyrinth
Documentation
use asterion::{game::ssh_game::AsterionGame, store_path, AppResult};
use clap::{ArgAction, Parser};
use log::LevelFilter;
use log4rs::{
    append::file::FileAppender,
    config::{Appender, Root},
    encode::pattern::PatternEncoder,
    Config,
};
use std::fs;
use std::path::PathBuf;

const DEFAULT_PORT: u16 = 2020;

#[derive(Parser, Debug)]
#[clap(name="Asterion", about = "Find your way in da maze", author, version, long_about = None)]
struct Args {
    #[clap(long, short = 'p', action=ArgAction::Set, help = "Set port to listen on")]
    port: Option<u16>,
}

#[tokio::main]
async fn main() -> AppResult<()> {
    let logfile_path = store_path("asterion.log")?;
    let logfile = FileAppender::builder()
        .append(false)
        .encoder(Box::new(PatternEncoder::new("{l} - {m}\n")))
        .build(logfile_path)?;

    let config = Config::builder()
        .appender(Appender::builder().build("logfile", Box::new(logfile)))
        .build(Root::builder().appender("logfile").build(LevelFilter::Info))?;

    log4rs::init_config(config)?;

    // Create images folder to store mazes if it doesn't exist
    let mut images_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    images_dir.push("images");
    fs::create_dir_all(&images_dir)?;

    let port = Args::parse().port.unwrap_or(DEFAULT_PORT);
    let game = AsterionGame::new();
    frittura_ssh_core::run_server(game, port).await?;
    Ok(())
}