Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
499d6c6ac5 | |||
9aa168cadf | |||
d94daca664 | |||
decd6bc9a2 |
2 changed files with 27 additions and 14 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "config"
|
name = "config"
|
||||||
version = "0.4.0"
|
version = "0.4.2"
|
||||||
edition = "2021"
|
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
|
||||||
|
|
39
src/main.rs
39
src/main.rs
|
@ -2,6 +2,7 @@ use std::{
|
||||||
env::{ current_dir, var },
|
env::{ current_dir, var },
|
||||||
error::Error,
|
error::Error,
|
||||||
fs::read_to_string,
|
fs::read_to_string,
|
||||||
|
io::{ stdout, IsTerminal },
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
process::{
|
process::{
|
||||||
Command,
|
Command,
|
||||||
|
@ -21,8 +22,14 @@ fn main() -> Result<(), Box<dyn Error>>{
|
||||||
// get args
|
// get args
|
||||||
let mut args = Arguments::from_env();
|
let mut args = Arguments::from_env();
|
||||||
|
|
||||||
|
// collect args
|
||||||
|
let flag_help = args.contains(["-h", "--help"]);
|
||||||
|
let flag_list = args.contains(["-l", "--list"]);
|
||||||
|
let flag_dir = args.contains(["-d", "--dir"]);
|
||||||
|
let flag_path = args.contains(["-p", "--path"]);
|
||||||
|
|
||||||
// handle help flag
|
// handle help flag
|
||||||
if args.contains(["-h", "--help"]) {
|
if flag_help {
|
||||||
help_text();
|
help_text();
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
@ -50,19 +57,23 @@ fn main() -> Result<(), Box<dyn Error>>{
|
||||||
let mut section: &Map<String, Value> = config;
|
let mut section: &Map<String, Value> = config;
|
||||||
let mut target = args.subcommand().unwrap();
|
let mut target = args.subcommand().unwrap();
|
||||||
let mut fullname = String::new();
|
let mut fullname = String::new();
|
||||||
while target.is_some() {
|
if target.is_some() {
|
||||||
let entry = target.unwrap().clone();
|
loop {
|
||||||
if !fullname.is_empty() { fullname += "."; }
|
let entry = target.as_ref().unwrap();
|
||||||
fullname += &entry;
|
if !fullname.is_empty() { fullname += "."; }
|
||||||
let i_section = section.get(&entry);
|
fullname += entry;
|
||||||
if i_section.is_none() { error::no_section(&entry); }
|
let i_section = section.get(entry);
|
||||||
section = i_section.unwrap().as_table().unwrap();
|
if i_section.is_none() { error::no_section(&entry); }
|
||||||
|
section = i_section.unwrap().as_table().unwrap();
|
||||||
|
|
||||||
target = args.subcommand().unwrap();
|
let i_target = args.subcommand().unwrap();
|
||||||
|
if i_target.is_none() { break; }
|
||||||
|
target = i_target;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle list flag
|
// handle list flag
|
||||||
if args.contains(["-l", "--list"]) {
|
if flag_list {
|
||||||
for (key, _) in section.iter() {
|
for (key, _) in section.iter() {
|
||||||
println!("{key}");
|
println!("{key}");
|
||||||
}
|
}
|
||||||
|
@ -71,9 +82,11 @@ fn main() -> Result<(), Box<dyn Error>>{
|
||||||
|
|
||||||
if target.is_none() { error::no_args(); }
|
if target.is_none() { error::no_args(); }
|
||||||
|
|
||||||
|
let is_terminal = stdout().is_terminal();
|
||||||
|
|
||||||
let prop_path = section.get("path");
|
let prop_path = section.get("path");
|
||||||
// handle dir flag
|
// handle dir flag
|
||||||
if args.contains(["-d", "--dir"]) {
|
if flag_dir {
|
||||||
if prop_path.is_none() {
|
if prop_path.is_none() {
|
||||||
error::no_property(&fullname, "path");
|
error::no_property(&fullname, "path");
|
||||||
}
|
}
|
||||||
|
@ -90,7 +103,7 @@ fn main() -> Result<(), Box<dyn Error>>{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
// handle path flag
|
// handle path flag
|
||||||
if args.contains(["-p", "--path"]) {
|
if flag_path || !is_terminal {
|
||||||
if prop_path.is_none() { error::no_property(&fullname, "path"); }
|
if prop_path.is_none() { error::no_property(&fullname, "path"); }
|
||||||
let i_file_path = prop_path.unwrap().as_str().unwrap();
|
let i_file_path = prop_path.unwrap().as_str().unwrap();
|
||||||
let file_path = if i_file_path.starts_with("~") { i_file_path.replace("~", &home_dir) } else { i_file_path.to_string() };
|
let file_path = if i_file_path.starts_with("~") { i_file_path.replace("~", &home_dir) } else { i_file_path.to_string() };
|
||||||
|
@ -155,7 +168,7 @@ fn help_text() {
|
||||||
Valerie Wolfe <sleeplessval@gmail.com>
|
Valerie Wolfe <sleeplessval@gmail.com>
|
||||||
A configuration manager written in Rust.
|
A configuration manager written in Rust.
|
||||||
|
|
||||||
usage: config [flags] <name>
|
usage: config <name> [flags]
|
||||||
|
|
||||||
args:
|
args:
|
||||||
<name> The name of the section to configure.
|
<name> The name of the section to configure.
|
||||||
|
|
Loading…
Reference in a new issue