Main: Make content checking optional for overriding file

This commit is contained in:
networkException 2023-11-10 19:12:49 +01:00
parent 6bef09b8c0
commit 2d8121510d
Signed by: networkException
GPG key ID: E3877443AE684391

View file

@ -55,13 +55,33 @@ impl Display for CharacterSet {
}
#[derive(Debug, Clone, ValueEnum)]
enum BranchType {
enum WhenFileExists {
Exit,
Error,
Override,
CheckContent
}
impl Display for WhenFileExists {
fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Exit => write!(formatter, "Exit"),
Self::Error => write!(formatter, "Error"),
Self::Override => write!(formatter, "Override"),
Self::CheckContent => write!(formatter, "CheckInvalidContent"),
}
}
}
#[derive(Debug, Clone, ValueEnum)]
enum WhenFileContentIsInvalid {
Exit,
Error,
Override,
}
impl Display for BranchType {
impl Display for WhenFileContentIsInvalid {
fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Exit => write!(formatter, "Exit"),
@ -71,6 +91,7 @@ impl Display for BranchType {
}
}
/// Generate random strings and put them in a file
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
@ -89,11 +110,11 @@ struct Arguments {
/// What to do when a file already exists at the given path
#[arg(long, env, default_value = "error")]
when_file_exists: BranchType,
when_file_exists: WhenFileExists,
/// What to do when the content of a file at the given path does not match the character set or length
#[arg(long, env, default_value = "error")]
when_file_content_does_not_match: BranchType,
when_file_content_is_invalid: WhenFileContentIsInvalid,
}
fn main() -> io::Result<()> {
@ -118,26 +139,23 @@ fn main() -> io::Result<()> {
if exists {
match arguments.when_file_exists {
BranchType::Exit => {
WhenFileExists::Exit => {
log::info!("File exists, exiting.");
process::exit(0);
},
BranchType::Error => {
WhenFileExists::Error => {
log::error!("File exists, exiting.");
process::exit(1);
}
BranchType::Override => (),
};
},
WhenFileExists::CheckContent => {
let content = fs::read_to_string(path.clone().unwrap())?;
let non_matching_characters = character_set.non_matching_characters(&content);
let content_length = content.len();
if non_matching_characters.is_empty() && content_length == length {
log::debug!("File exists, matches character set and length, exiting.");
return Ok(());
log::debug!("File exists, valid character set and length, exiting.");
process::exit(0);
} else {
let found_non_matching = non_matching_characters.iter().take(5).collect::<String>();
let found_non_matching = escape_string::escape(found_non_matching.as_str());
@ -147,20 +165,23 @@ fn main() -> io::Result<()> {
found_non_matching
};
match arguments.when_file_content_does_not_match {
BranchType::Exit => {
log::info!("File exists, does not match character set (found [{}]) or length (found {}), exiting.", found_non_matching, content_length);
match arguments.when_file_content_is_invalid {
WhenFileContentIsInvalid::Exit => {
log::info!("File exists, invalid character set (found [{}]) or length (found {}), exiting.", found_non_matching, content_length);
process::exit(0);
},
BranchType::Error => {
log::error!("File exists, does not match character set (found [{}]) or length (found {}), exiting.", found_non_matching, content_length);
WhenFileContentIsInvalid::Error => {
log::error!("File exists, invalid character set (found [{}]) or length (found {}), exiting.", found_non_matching, content_length);
process::exit(1);
},
BranchType::Override => {
log::debug!("File exists, does not match character set (found [{}]) or length (found {}).", found_non_matching, content_length);
WhenFileContentIsInvalid::Override => {
log::debug!("File exists, invalid character set (found [{}]) or length (found {}).", found_non_matching, content_length);
},
};
}
},
WhenFileExists::Override => (),
};
}
log::debug!("Generating using {} with length {}", character_set, length);