mgart 0.0.2

Machine Generated Art. CLI app for generating algorithmic art
Documentation
use clap::Parser;

use jsonnet::JsonnetVm;

use std::fs::File;
use std::io::stdin;

use mgart::Algorithms;

#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
struct Cli {
  #[clap(default_value = ".")]
  file: String,
}

fn main() {
  env_logger::Builder::from_env(
    env_logger::Env::default().default_filter_or("info"),
  )
  .init();

  let cli = Cli::parse();

  let a: Algorithms = if cli.file == "." {
    serde_json::from_reader(stdin()).unwrap()
  } else if let Some(extension) = cli.file.split('.').last() {
    match extension {
      "json" => serde_json::from_reader(File::open(cli.file).unwrap()).unwrap(),
      "jsonnet" => {
        let mut vm = JsonnetVm::new();
        let content = vm.evaluate_file(cli.file).unwrap();
        serde_json::from_str(content.as_str()).unwrap()
      }
      _ => panic!("unrecognizable file extension: {extension}. Only .json and .jsonnet files are supported"),
    }
  } else {
    panic!("unrecognizable file type. Only .json and .jsonnet files are supported");
  };

  a.create();
}