javy-codegen 4.0.0

Wasm generation library for use with Javy
Documentation
use anyhow::{Result, anyhow};
use convert_case::{Case, Casing};
use std::path::Path;

use crate::js::JS;
use crate::wit;

pub(crate) type Exports = Vec<Export>;

#[derive(Debug, Clone)]
pub(crate) struct Export {
    pub wit: String,
    pub js: String,
}

pub(crate) fn process_exports(js: &JS, wit: &Path, wit_world: &str) -> Result<Vec<Export>> {
    let js_exports = js.exports()?;
    wit::parse_exports(wit, wit_world)?
        .into_iter()
        .map(|wit_export| {
            let export = wit_export.from_case(Case::Kebab).to_case(Case::Camel);
            if !js_exports.contains(&export) {
                Err(anyhow!("JS module does not export {export}"))
            } else {
                Ok(Export {
                    wit: wit_export,
                    js: export,
                })
            }
        })
        .collect::<Result<Vec<Export>>>()
}