feophant 0.9.0

A SQL database server written in Rust and inspired by PostreSQL
Documentation
#![forbid(unsafe_code)]

#[macro_use]
extern crate log;

extern crate simplelog;
use feophantlib::feophant::FeOphant;
use simplelog::{ColorChoice, CombinedLogger, Config, LevelFilter, TermLogger, TerminalMode};
use std::env;
use thiserror::Error;
use tokio::{
    signal,
    sync::{
        mpsc::{self, UnboundedReceiver, UnboundedSender},
        oneshot::{self, Sender},
    },
};

const DEFAULT_PORT: u16 = 50000;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    CombinedLogger::init(vec![TermLogger::new(
        LevelFilter::Debug,
        Config::default(),
        TerminalMode::Mixed,
        ColorChoice::Auto,
    )])?;

    info!("Welcome to FeOphant!");

    let data_dir = env::args_os().nth(1).ok_or_else(MainError::NoDataDir)?;
    let (request_shutdown, receive_shutdown): (
        UnboundedSender<Sender<()>>,
        UnboundedReceiver<Sender<()>>,
    ) = mpsc::unbounded_channel();

    let feo = FeOphant::new(data_dir, DEFAULT_PORT).await?;

    tokio::spawn(async move {
        feo.start(receive_shutdown).await;
    });

    signal::ctrl_c().await?;

    let (res_shutdown, rev_shutdown) = oneshot::channel();
    request_shutdown.send(res_shutdown)?;

    Ok(rev_shutdown.await?)
}
#[derive(Debug, Error)]
pub enum MainError {
    #[error("You MUST provide a writeable directory so FeOphant can store its data.")]
    NoDataDir(),
}