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