#[cfg(test)]
use std::{fs, io::Write, path::Path, process::Command};
use {
crate::{
module::{self, ModuleOptions},
utils, Error, Result,
},
cargo_toml::Package,
};
pub fn create_module_in_package(
path: &str,
options: ModuleOptions,
_package: Package,
) -> Result<()> {
_create_module_in_package(path, options)
}
fn _create_module_in_package(path: &str, options: ModuleOptions) -> Result<()> {
let path_segments: Vec<&str> = path.split("::").collect();
let has_empty = path_segments.iter().any(|s| s.is_empty());
if has_empty {
return Err(Error::EmptyPath);
}
let root_file_name = utils::get_root_file_name()?;
module::create_module(root_file_name, &path_segments, options)
}
#[test]
fn create_module_in_package_test() {
_create_module_in_package("protocol", ModuleOptions::default()).unwrap();
assert!(Path::new("src/protocol").is_dir());
assert!(Path::new("src/protocol/mod.rs").is_file());
let cmd = Command::new("cargo").arg("build").output().unwrap();
assert!(
cmd.status.success(),
"{}",
String::from_utf8_lossy(&cmd.stderr)
);
utils::cowfile("src/main.rs", |file, contents| {
let contents = contents.to_owned().replace("mod protocol;\n", "");
file.write_all(contents.as_bytes())?;
Ok(())
})
.unwrap();
fs::remove_dir_all("src/protocol").unwrap();
}