summaryrefslogtreecommitdiffstats
path: root/vendor/minifier/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/minifier/src/main.rs')
-rw-r--r--vendor/minifier/src/main.rs94
1 files changed, 94 insertions, 0 deletions
diff --git a/vendor/minifier/src/main.rs b/vendor/minifier/src/main.rs
new file mode 100644
index 000000000..eb420325e
--- /dev/null
+++ b/vendor/minifier/src/main.rs
@@ -0,0 +1,94 @@
+// Take a look at the license at the top of the repository in the LICENSE file.
+
+extern crate minifier;
+
+use std::env;
+use std::ffi::OsStr;
+use std::fs::{File, OpenOptions};
+use std::io::{self, Read, Write};
+use std::path::{Path, PathBuf};
+
+use minifier::{css, js, json};
+
+fn print_help() {
+ println!(
+ r##"For now, this minifier supports the following type of files:
+
+ * .css
+ * .js
+ * .json"##
+ );
+}
+
+pub fn get_all_data(file_path: &str) -> io::Result<String> {
+ let mut file = File::open(file_path)?;
+ let mut data = String::new();
+
+ file.read_to_string(&mut data).unwrap();
+ Ok(data)
+}
+
+fn call_minifier<F>(file_path: &str, func: F)
+where
+ F: Fn(&str) -> String,
+{
+ match get_all_data(file_path) {
+ Ok(content) => {
+ let mut out = PathBuf::from(file_path);
+ let original_extension = out
+ .extension()
+ .unwrap_or_else(|| OsStr::new(""))
+ .to_str()
+ .unwrap_or("")
+ .to_owned();
+ out.set_extension(format!("min.{}", original_extension));
+ if let Ok(mut file) = OpenOptions::new()
+ .truncate(true)
+ .write(true)
+ .create(true)
+ .open(out.clone())
+ {
+ if let Err(e) = write!(file, "{}", func(&content)) {
+ eprintln!("Impossible to write into {:?}: {}", out, e);
+ } else {
+ println!("{:?}: done -> generated into {:?}", file_path, out);
+ }
+ } else {
+ eprintln!("Impossible to create new file: {:?}", out);
+ }
+ }
+ Err(e) => eprintln!("\"{}\": {}", file_path, e),
+ }
+}
+
+fn main() {
+ let args: Vec<_> = env::args().skip(1).collect();
+
+ if args.is_empty() {
+ println!("Missing files to work on...\nExample: ./minifier file.js\n");
+ print_help();
+ return;
+ }
+ for arg in &args {
+ let p = Path::new(arg);
+
+ if !p.is_file() {
+ eprintln!("\"{}\" isn't a file", arg);
+ continue;
+ }
+ match p
+ .extension()
+ .unwrap_or_else(|| OsStr::new(""))
+ .to_str()
+ .unwrap_or("")
+ {
+ "css" => call_minifier(arg, |s| {
+ css::minify(s).expect("css minification failed").to_string()
+ }),
+ "js" => call_minifier(arg, |s| js::minify(s).to_string()),
+ "json" => call_minifier(arg, |s| json::minify(s).to_string()),
+ // "html" | "htm" => call_minifier(arg, html::minify),
+ x => println!("\"{}\": this format isn't supported", x),
+ }
+ }
+}