Update manifest handling and integrate with command_init
Introduced a new 'manifest' module to manage manifest files and updated 'command_init' to utilize this module, replacing previously hard-coded functionalities. Added 'manifest' package dependencies to Cargo.lock and command_init's Cargo.toml files.
This commit is contained in:
parent
b3d7c776e8
commit
63d01ea03c
|
@ -113,6 +113,12 @@ dependencies = [
|
||||||
"manifest",
|
"manifest",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "equivalent"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.3.8"
|
version = "0.3.8"
|
||||||
|
@ -123,12 +129,34 @@ dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.14.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
|
||||||
|
dependencies = [
|
||||||
|
"equivalent",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.151"
|
version = "0.2.151"
|
||||||
|
@ -144,6 +172,10 @@ checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "manifest"
|
name = "manifest"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"serde_yaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mccli"
|
name = "mccli"
|
||||||
|
@ -184,6 +216,45 @@ dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.194"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0b114498256798c94a0689e1a15fec6005dee8ac1f41de56404b67afc2a4b773"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.194"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a3385e45322e8f9931410f01b3031ec534c3947d0e94c18049af4d9f9907d4e0"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
|
@ -232,6 +303,12 @@ version = "0.1.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8parse"
|
name = "utf8parse"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|
|
@ -11,6 +11,10 @@ pub struct Arguments {
|
||||||
pub fn execute (_arguments: &Arguments) {
|
pub fn execute (_arguments: &Arguments) {
|
||||||
let directory: PathBuf = PathBuf::from(_arguments.directory.clone());
|
let directory: PathBuf = PathBuf::from(_arguments.directory.clone());
|
||||||
|
|
||||||
let manifest = Manifest::new(&directory);
|
let manifest = Manifest::from(&directory);
|
||||||
manifest.init();
|
|
||||||
|
match manifest.init() {
|
||||||
|
true => println!("Project initialized"),
|
||||||
|
false => println!("Project already initialized")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,3 +6,5 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
serde = {version = "1.0", features = ["derive"]}
|
||||||
|
serde_yaml = "0.9"
|
|
@ -1,13 +1,17 @@
|
||||||
|
use std::error::Error;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::{PathBuf};
|
use std::path::{PathBuf};
|
||||||
|
use crate::manifest_file::ManifestFile;
|
||||||
|
|
||||||
|
mod manifest_file;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Manifest {
|
pub struct Manifest {
|
||||||
directory: PathBuf
|
directory: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Manifest {
|
impl Manifest {
|
||||||
pub fn new(path: &PathBuf) -> Manifest {
|
pub fn from(path: &PathBuf) -> Manifest {
|
||||||
let mut directory: PathBuf = path.into();
|
let mut directory: PathBuf = path.into();
|
||||||
|
|
||||||
if path.is_file() {
|
if path.is_file() {
|
||||||
|
@ -15,7 +19,7 @@ impl Manifest {
|
||||||
.map(|parent| parent.to_path_buf())
|
.map(|parent| parent.to_path_buf())
|
||||||
.unwrap_or_else(|| path.into())
|
.unwrap_or_else(|| path.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(_err) = fs::create_dir_all(&directory) {
|
if let Err(_err) = fs::create_dir_all(&directory) {
|
||||||
panic!("Failed to created directory: {:?}", &directory);
|
panic!("Failed to created directory: {:?}", &directory);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +27,36 @@ impl Manifest {
|
||||||
Manifest { directory: directory.canonicalize().unwrap() }
|
Manifest { directory: directory.canonicalize().unwrap() }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init(&self) -> bool {
|
pub fn init(&self) -> bool {
|
||||||
let directory: PathBuf = self.directory.clone();
|
let file: PathBuf = self.file_path();
|
||||||
|
|
||||||
println!("init: {:?}", directory);
|
if !file.exists() {
|
||||||
|
let manifest_file: ManifestFile = ManifestFile::from(self.directory_name());
|
||||||
|
|
||||||
true
|
return match manifest_file.write(&file) {
|
||||||
|
Ok(_) => true,
|
||||||
|
Err(_) => panic!("Unable to write to file: {:?}", &file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn file_path(&self) -> PathBuf {
|
||||||
|
return PathBuf::from(format!("{}/{}", self.directory.to_string_lossy(), "mccli.yaml"));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn directory_path(&self) -> PathBuf {
|
||||||
|
return PathBuf::from(&self.directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn directory_name(&self) -> String {
|
||||||
|
let directory = self.directory_path();
|
||||||
|
|
||||||
|
return directory
|
||||||
|
.file_name()
|
||||||
|
.unwrap()
|
||||||
|
.to_string_lossy()
|
||||||
|
.to_string();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
use std::error::Error;
|
||||||
|
use std::fs;
|
||||||
|
use std::fs::File;
|
||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use serde::de::DeserializeOwned;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Default)]
|
||||||
|
pub struct ManifestFile {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ManifestFile {
|
||||||
|
pub fn from(name: String) -> ManifestFile {
|
||||||
|
return ManifestFile { name }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read<Content: DeserializeOwned>(path: &PathBuf) -> Result<Content, Box<dyn Error>> {
|
||||||
|
let file = File::open(path)?;
|
||||||
|
|
||||||
|
let data: Content = serde_yaml::from_reader(file)?;
|
||||||
|
|
||||||
|
Ok(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write(&self, path: &PathBuf) -> Result<bool, Box<dyn Error>> {
|
||||||
|
if path.exists() {
|
||||||
|
fs::remove_file(path)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let file = File::create(path)?;
|
||||||
|
|
||||||
|
serde_yaml::to_writer(file, self)?;
|
||||||
|
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue