cog-task 1.2.0

A general-purpose low-latency application to run cognitive tasks
Documentation
use cog_task::assets::VERSION;
use cog_task::server::Server;
use eyre::{Context, Result};
use sha2::{Digest, Sha256};
use std::env::current_exe;
use std::path::PathBuf;

fn main() -> Result<()> {
    let args: Vec<_> = std::env::args().collect();
    if args.len() != 2 {
        println!("Invalid number of arguments. Correct usage:\n./server path_to_task_dir");
        std::process::exit(1);
    } else {
        println!("Starting task \"{}\" with Server-v{}...", args[1], VERSION);
    }

    let mut bin = current_exe().wrap_err("Could not obtain path to current executable.")?;
    while bin.is_symlink() {
        bin = bin
            .read_link()
            .wrap_err("Could not dereference symlink to current executable.")?;
    }
    let mut hasher = Sha256::default();
    hasher.update(&std::fs::read(bin).unwrap());
    let bin_hash = hex::encode(hasher.finalize());

    let path = PathBuf::from(&args[1]);

    Server::new(path, bin_hash)?.run();
    Ok(())
}