1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use std::path::PathBuf;
use anyhow::{Context, Error};
use clap::Parser;
#[derive(Debug, Parser)]
pub struct Codegen {
#[clap(short, long)]
out_dir: Option<PathBuf>,
#[clap(parse(from_os_str))]
input: PathBuf,
}
impl Codegen {
pub fn run(self, language: Language) -> Result<(), Error> {
let Codegen { out_dir, input } = self;
let pkg = crate::pirita::load(&input)?;
let files = match language {
Language::JavaScript => wasmer_pack::generate_javascript(&pkg)?,
Language::Python => wasmer_pack::generate_python(&pkg)?,
};
let metadata = pkg.metadata();
let out_dir = out_dir.unwrap_or_else(|| {
let pkg_name = &metadata.package_name;
match pkg_name.namespace().as_str() {
Some(ns) => PathBuf::from(ns).join(pkg_name.name()),
None => PathBuf::from(pkg_name.name()),
}
});
files
.save_to_disk(&out_dir)
.with_context(|| format!("Unable to save to \"{}\"", out_dir.display()))?;
Ok(())
}
}
#[derive(Debug, Copy, Clone)]
pub enum Language {
JavaScript,
Python,
}