code cleanup
This commit is contained in:
parent
ed9cd8edcc
commit
8fa2bd97af
|
@ -60,16 +60,16 @@ pub fn get_path(xdg: &str) -> Result<String, (String, u32)> {
|
|||
|
||||
if unsafe { libc::geteuid() } == 0 {
|
||||
dir = match xdg {
|
||||
"XDG_CACHE_HOME" => "/var/cms".to_owned(),
|
||||
"XDG_CONFIG_HOME" => "/etc/cms".to_owned(),
|
||||
"XDG_CACHE_HOME" => "/var".to_owned(),
|
||||
"XDG_CONFIG_HOME" => "/etc".to_owned(),
|
||||
_ => panic!("nya"),
|
||||
};
|
||||
} else {
|
||||
dir = match env::var(xdg) {
|
||||
Ok(val) => val,
|
||||
Ok(var) => var,
|
||||
Err(_) => {
|
||||
match env::var("HOME") {
|
||||
Ok(home) => format!("{}/.config/", home),
|
||||
Ok(home) => format!("{}/.config", home),
|
||||
Err(_) => {
|
||||
return Err((
|
||||
"Unable to determine path to current user’s home directory."
|
||||
|
@ -81,11 +81,8 @@ pub fn get_path(xdg: &str) -> Result<String, (String, u32)> {
|
|||
},
|
||||
};
|
||||
}
|
||||
match xdg {
|
||||
"XDG_CACHE_HOME" => Ok(format!("{}/cms", dir)),
|
||||
"XDG_CONFIG_HOME" => Ok(format!("{}/cms", dir)),
|
||||
_ => panic!("nya"),
|
||||
}
|
||||
|
||||
Ok(format!("{}/plaque", dir))
|
||||
}
|
||||
|
||||
impl Config {
|
||||
|
@ -99,14 +96,13 @@ impl Config {
|
|||
Err(err) => return Err((format!("{:?}", err), 1)),
|
||||
};
|
||||
|
||||
match config_file.read_to_end(&mut buf) {
|
||||
Ok(_) => {},
|
||||
Err(err) => return Err((format!("{:?}", err), 1)),
|
||||
};
|
||||
if let Some(err) = config_file.read_to_end(&mut buf).err() {
|
||||
return Err((format!("{:?}", err), EX_DATAERR));
|
||||
}
|
||||
|
||||
let toml = String::from_utf8(buf).unwrap();
|
||||
|
||||
match Config::deserialize(ValueDeserializer::new(&toml)) {
|
||||
match toml::from_str(&toml) {
|
||||
Ok(val) => Ok(val),
|
||||
Err(err) => Err((format!("{:?}", err), 1)),
|
||||
}
|
||||
|
@ -125,7 +121,7 @@ impl PageMeta {
|
|||
match Self::deserialize(ValueDeserializer::new(&input)) {
|
||||
Ok(val) => Ok(val),
|
||||
Err(_) => {
|
||||
Err(("Could not deserialized TOML.".to_owned(), EX_DATAERR))
|
||||
Err(("Invalid configuration file.".to_owned(), EX_DATAERR))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
142
src/main.rs
142
src/main.rs
|
@ -39,102 +39,82 @@ fn main() {
|
|||
let mut options = Options::empty();
|
||||
options.insert(Options::all());
|
||||
|
||||
let config_path = match get_path("XDG_CONFIG_DIR") {
|
||||
Ok(path) => path,
|
||||
Err((err, code)) => {
|
||||
let config = Config::read_config(
|
||||
get_path("XDG_CONFIG_DIR").unwrap_or_else(|(err, code)| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
},
|
||||
};
|
||||
|
||||
let config = match Config::read_config(config_path) {
|
||||
Ok(val) => val,
|
||||
Err((err, code)) => {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
}
|
||||
};
|
||||
})
|
||||
).unwrap_or_else(|(err, code)| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
});
|
||||
|
||||
let template_files = match read_dir(&config.template_dir) {
|
||||
Ok(files) => files,
|
||||
Err(_) => {
|
||||
eprintln!("{}: {}: Directory not found.", argv[0], &config.template_dir);
|
||||
let mut files = get_contents(
|
||||
read_dir(&config.content_dir).unwrap_or_else(|_| {
|
||||
eprintln!(
|
||||
"{}: {}: No such file or directory.",
|
||||
argv[0],
|
||||
&config.content_dir
|
||||
);
|
||||
exit(EX_UNAVAILABLE);
|
||||
})
|
||||
).unwrap_or_else(|(err, code)| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
});
|
||||
|
||||
let mut templates = get_templates(
|
||||
read_dir(&config.template_dir).unwrap_or_else(|_| {
|
||||
eprintln!(
|
||||
"{}: {}: No such file or directory.",
|
||||
argv[0],
|
||||
&config.template_dir
|
||||
);
|
||||
exit(EX_UNAVAILABLE);
|
||||
},
|
||||
};
|
||||
|
||||
let content_files = match read_dir(&config.content_dir) {
|
||||
Ok(files) => files,
|
||||
Err(_) => {
|
||||
eprintln!("{}: {}: Directory not found.", argv[0], &config.content_dir);
|
||||
exit(EX_UNAVAILABLE);
|
||||
},
|
||||
};
|
||||
|
||||
let mut files = match get_contents(content_files) {
|
||||
Ok(files) => files,
|
||||
Err((err, code)) => {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
},
|
||||
};
|
||||
|
||||
let mut templates = match get_templates(template_files) {
|
||||
Ok(templates) => templates,
|
||||
Err((err, code)) => {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
},
|
||||
};
|
||||
})
|
||||
).unwrap_or_else(|(err, code)| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
});
|
||||
|
||||
for content_file in files.drain() {
|
||||
let (content_name, (md, toml)) = content_file;
|
||||
let mut output = String::new();
|
||||
html::push_html(&mut output, Parser::new_ext(&md, options));
|
||||
|
||||
let meta_info = match PageMeta::read_meta(toml.to_owned()) {
|
||||
Ok(info) => info,
|
||||
Err((err, code)) => {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
},
|
||||
};
|
||||
let meta_info = PageMeta::read_meta(
|
||||
toml.to_owned()
|
||||
).unwrap_or_else(|(err, code)| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(code);
|
||||
});
|
||||
|
||||
let template = match templates.get_mut(&meta_info.template) {
|
||||
Some(template) => template,
|
||||
None => {
|
||||
eprintln!(
|
||||
"{}: {}: No such template “{}”.",
|
||||
argv[0],
|
||||
content_name,
|
||||
meta_info.template,
|
||||
);
|
||||
exit(EX_UNAVAILABLE);
|
||||
},
|
||||
};
|
||||
let dom = templates.get_mut(&meta_info.template).unwrap_or_else(|| {
|
||||
eprintln!(
|
||||
"{}: {}: No such template “{}”.",
|
||||
argv[0],
|
||||
content_name,
|
||||
meta_info.template,
|
||||
);
|
||||
exit(EX_UNAVAILABLE);
|
||||
}).get_mut_ref();
|
||||
|
||||
let mut html_file = match File::create(format!(
|
||||
let mut html_file = File::create(format!(
|
||||
"{}/{}.html",
|
||||
config.output_dir,
|
||||
meta_info.template,
|
||||
)) {
|
||||
Ok(file) => file,
|
||||
Err(_) => {
|
||||
eprintln!(
|
||||
"{}: {}: Unable to create output file.",
|
||||
argv[0],
|
||||
config.output_dir,
|
||||
);
|
||||
exit(EX_OSERR);
|
||||
},
|
||||
};
|
||||
)).unwrap_or_else(|_| {
|
||||
eprintln!(
|
||||
"{}: {}: Unable to create output file.",
|
||||
argv[0],
|
||||
config.output_dir,
|
||||
);
|
||||
exit(EX_OSERR);
|
||||
});
|
||||
|
||||
match html_file.write(output.as_bytes()) {
|
||||
Ok(_) => {},
|
||||
Err(err) => {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(EX_SOFTWARE);
|
||||
},
|
||||
};
|
||||
html_file.write(output.as_bytes()).unwrap_or_else(|err| {
|
||||
eprintln!("{}: {}", argv[0], err);
|
||||
exit(EX_SOFTWARE);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,8 +86,8 @@ pub fn get_templates(
|
|||
let (file_name, contents) = entry;
|
||||
|
||||
let dom = match unsafe {
|
||||
tl::parse_owned(contents, ParserOptions::default()) }
|
||||
{
|
||||
tl::parse_owned(contents, ParserOptions::default())
|
||||
} {
|
||||
Ok(dom) => dom,
|
||||
Err(err) => return Err((format!("{:?}", err), EX_DATAERR)),
|
||||
};
|
||||
|
@ -115,7 +115,6 @@ pub fn read_files(
|
|||
return Err((format!("Invalid file name."), EX_DATAERR));
|
||||
},
|
||||
};
|
||||
|
||||
let contents = match File::open(&file_name) {
|
||||
Ok(mut md_file) => {
|
||||
md_file.read_to_end(&mut buf).unwrap();
|
||||
|
@ -123,7 +122,7 @@ pub fn read_files(
|
|||
},
|
||||
Err(_) => {
|
||||
return Err((
|
||||
format!("{}: No such file or directory.", file_name),
|
||||
format!("No such file or directory."),
|
||||
EX_UNAVAILABLE
|
||||
));
|
||||
},
|
||||
|
|
Reference in New Issue