use std::io::{self, BufRead};
use std::path::*;
pub fn inline_wasm_bindgen_bundler_importer(o: impl std::fmt::Write, function_name: &str, dir: &Path, target: &str) -> io::Result<()> {
match inline_wasm_bindgen_bundler_importer_impl(o, function_name, dir, target) {
Ok(()) => Ok(()),
Err(FmtOrIoError::Fmt(err)) => Err(io::Error::new(io::ErrorKind::Other, format!("error formatting output: {}", err))),
Err(FmtOrIoError::Io(err)) => Err(err),
}
}
fn inline_wasm_bindgen_bundler_importer_impl(mut o: impl std::fmt::Write, function_name: &str, dir: &Path, target: &str) -> Result<(), FmtOrIoError> {
let bg_js = dir.join(format!("{}_bg.js", target));
let mut bg_js = std::io::BufReader::new(std::fs::File::open(&bg_js)?);
let mut line = String::new();
writeln!(o, "function {}(__cargo_html_import) {{", function_name)?;
writeln!(o, " const __cargo_html_exports = {{}};")?;
while { line.clear(); bg_js.read_line(&mut line)? != 0 } {
let line = line.trim_end();
if let Some(export) = line.strip_prefix("export const ") {
writeln!(o," __cargo_html_exports.{}", export.trim_start())?;
} else if let Some(import_module) = line.strip_prefix("import * as wasm from ").and_then(|line| line.strip_suffix(";")) {
writeln!(o," const wasm = __cargo_html_import({});", import_module)?;
} else {
writeln!(o," {}", line)?;
}
}
writeln!(o, " return {{ {:?}: __cargo_html_exports }};", format!("./{}_bg.js", target))?;
writeln!(o, "}}")?;
Ok(())
}
enum FmtOrIoError {
Fmt(std::fmt::Error),
Io (std::io ::Error),
}
impl From<std::fmt::Error> for FmtOrIoError { fn from(err: std::fmt::Error) -> Self { FmtOrIoError::Fmt(err) } }
impl From<std::io ::Error> for FmtOrIoError { fn from(err: std::io ::Error) -> Self { FmtOrIoError::Io(err) } }