#[deny(missing_docs)]
#[deny(rustdoc::missing_crate_level_docs)]
#[deny(rustdoc::broken_intra_doc_links)]
#[deny(rustdoc::private_intra_doc_links)]
use {
crate::core::{
Config, State, collect_file_names, copy_originals_to_output,
create_all_output_directories, install_images_into, process_images,
save_html_picture_tags,
},
indicatif::ProgressBar,
log::error,
queue::Queue,
std::path::PathBuf,
walkdir::WalkDir,
};
pub mod core;
pub mod utils;
pub mod webp;
pub mod path;
pub mod fs;
pub mod html5;
pub fn is_png(input: &PathBuf) -> bool {
match input.extension() {
Some(s) => match s.to_str() {
None => false,
Some(v) => v == "png",
},
None => false,
}
}
pub fn collect_png_file_names(
input_dir: &PathBuf,
progressbar: Option<ProgressBar>,
) -> Vec<PathBuf> {
let mut file_names = vec![];
for entry in WalkDir::new(&input_dir) {
let entry = if let Err(msg) = &entry {
error!("{}", msg.to_string());
continue;
} else {
entry.unwrap()
};
let entry = entry.into_path();
if let Some(ref pb) = progressbar {
pb.tick();
}
if !is_png(&entry) {
continue;
}
file_names.push(entry);
}
file_names
}
pub fn run(config: Config) {
if !&config.input_dir.exists() {
error!("Input directory does not exist!");
return;
}
match &config.scaled_images_count {
0 => {
error!("Minimum scaled images count is 1!");
return;
}
_ => (),
}
let mut q: Queue<fn(&mut State)> = Queue::new();
q.queue(collect_file_names).unwrap();
q.queue(create_all_output_directories).unwrap();
q.queue(copy_originals_to_output).unwrap();
q.queue(process_images).unwrap();
if let Some(_) = &config.install_images_into {
q.queue(install_images_into).unwrap();
}
if let Some(_) = &config.picture_tags_output_folder {
q.queue(save_html_picture_tags).unwrap();
}
let mut s = State::new(config, q.len());
while let Some(step_function) = s.dequeue(&mut q) {
step_function(&mut s);
}
}