extern crate serde_derive;
extern crate toml;
pub mod generators;
use crate::generators::{package, pre_install, start, uninstall};
use std::env;
use std::fs::OpenOptions;
use std::fs::{read_to_string, File};
use std::io::prelude::*;
use std::path::Path;
use serde_derive::Deserialize;
#[derive(Deserialize, Debug, Default)]
pub struct Package {
pub name: String,
pub version: String,
pub description: Option<String>,
pub repository: Option<String>,
pub keywords: Option<Vec<String>>,
pub authors: Option<Vec<String>>,
pub homepage: Option<String>,
pub license: Option<String>,
pub publish: Option<bool>,
}
#[derive(Deserialize, Debug, Default)]
pub struct CargoToml {
pub package: Package,
}
pub fn ready_write_file(name: &str) -> File {
OpenOptions::new()
.write(true)
.truncate(true)
.create(true)
.open(&name)
.expect("Unable to open {name}")
}
pub fn get_package_def() -> Package {
let cargo_toml = format!("{}{}", env::current_dir().unwrap().display(), "/Cargo.toml");
let cargo_toml = Path::new(&cargo_toml);
let cargo_file: String = read_to_string(cargo_toml).unwrap();
let cargo_toml: CargoToml = toml::from_str(&cargo_file).unwrap();
let package_def: Package = cargo_toml.package;
package_def
}
pub fn create_package(npm_package_name: &Option<String>, source: &bool) -> Package {
println!("Building contents...");
let package_json = "./package.json";
let pre_install = "./pre-install.js";
let uninstall = "./uninstall.js";
let start = "./start.js";
let mut package_json_file = ready_write_file(&package_json);
let mut pre_install_file = ready_write_file(&pre_install);
let mut start_file = ready_write_file(&start);
let mut uninstall_file = ready_write_file(&uninstall);
let cargo_toml = format!("{}{}", env::current_dir().unwrap().display(), "/Cargo.toml");
let cargo_toml = Path::new(&cargo_toml);
let cargo_file: String = read_to_string(cargo_toml).unwrap();
let cargo_toml: CargoToml = toml::from_str(&cargo_file).unwrap();
let mut package_def: Package = cargo_toml.package;
let name = package_def.name.clone();
let pkg_name = npm_package_name.as_ref().unwrap_or(&name);
package_def.name = pkg_name.to_string();
package_json_file
.write_all(&package::generate_package_json(&mut package_def, source).as_bytes())
.unwrap();
pre_install_file
.write_all(
&pre_install::generate_pre_install(&name, &package_def.version, source).as_bytes(),
)
.unwrap();
start_file
.write_all(&start::generate_start(&name).as_bytes())
.unwrap();
uninstall_file
.write_all(&uninstall::generate_uninstall(&name).as_bytes())
.unwrap();
package_json_file.flush().unwrap();
start_file.flush().unwrap();
pre_install_file.flush().unwrap();
uninstall_file.flush().unwrap();
println!("Finished creating modules for package.");
package_def
}