use std::fs::File; use std::io::prelude::*; use std::path::Path; use failure::Error; use serde_json; #[derive(Deserialize)] pub struct NpmPackage { pub name: String, pub description: String, pub version: String, pub license: String, pub repository: Repository, pub files: Vec, #[serde(default = "default_none")] pub main: String, #[serde(default = "default_none")] pub module: String, #[serde(default = "default_none")] pub browser: String, #[serde(default = "default_none")] pub types: String, #[serde(default = "default_false", rename = "sideEffects")] pub side_effects: bool, pub homepage: Option, pub keywords: Option>, } fn default_none() -> String { "".to_string() } fn default_false() -> bool { false } #[derive(Deserialize)] pub struct Repository { #[serde(rename = "type")] pub ty: String, pub url: String, } pub fn read_package_json(path: &Path, out_dir: &Path) -> Result { let manifest_path = path.join(out_dir).join("package.json"); let mut pkg_file = File::open(manifest_path)?; let mut pkg_contents = String::new(); pkg_file.read_to_string(&mut pkg_contents)?; Ok(serde_json::from_str(&pkg_contents)?) }