fixed array matching and printing
This commit is contained in:
parent
de4b897aa8
commit
e3e1807656
73
src/main.rs
73
src/main.rs
@ -39,7 +39,7 @@ fn parse_toml(
|
||||
let mut out = String::new();
|
||||
|
||||
while let Some(item) = tabkey.next() {
|
||||
let value = match root.get(item) {
|
||||
let mut value = match root.get(item) {
|
||||
Some(val) => val,
|
||||
None => {
|
||||
return Err((format!("{}: No such table or key.", item), EX_DATAERR));
|
||||
@ -47,6 +47,24 @@ fn parse_toml(
|
||||
};
|
||||
|
||||
match value {
|
||||
Value::Array(array) => {
|
||||
let i = match index {
|
||||
Some(i) => i,
|
||||
None => {
|
||||
for v in array.iter() {
|
||||
out.push_str(&format!("{}\n", v.to_string()));
|
||||
}
|
||||
continue;
|
||||
},
|
||||
};
|
||||
|
||||
match array.get(i) {
|
||||
Some(val) => value = val,
|
||||
None => {
|
||||
return Err((format!("No value at index {}.", i), EX_DATAERR));
|
||||
},
|
||||
};
|
||||
},
|
||||
Value::Table(table) => {
|
||||
if tabkey.peek().is_some() {
|
||||
root = toml::Value::Table(table.to_owned());
|
||||
@ -61,38 +79,20 @@ fn parse_toml(
|
||||
};
|
||||
|
||||
match value {
|
||||
Value::Array(array) => { // TODO: Split Array logic into separate function
|
||||
let element: String;
|
||||
match index {
|
||||
Some(i) => {
|
||||
element = match array.get(i) {
|
||||
Some(element) => {
|
||||
match element.as_str() {
|
||||
Some(val) => val.to_owned(),
|
||||
None => {
|
||||
return Err((
|
||||
format!("{:?}: No value at given key.", i),
|
||||
EX_DATAERR
|
||||
));
|
||||
},
|
||||
}
|
||||
},
|
||||
None => {
|
||||
return Err(
|
||||
(format!("{:?}: No value at given index.", i), EX_DATAERR)
|
||||
);
|
||||
},
|
||||
};
|
||||
},
|
||||
None => element = format!("{:?}", array),
|
||||
};
|
||||
out.push_str(&element);
|
||||
},
|
||||
Value::Boolean(boolean) => out.push_str(&format!("{:?}", boolean)),
|
||||
Value::Datetime(datetime) => out.push_str(&format!("{:?}", datetime)),
|
||||
Value::Float(float) => out.push_str(&format!("{:?}", float)),
|
||||
Value::Integer(int) => out.push_str(&format!("{:?}", int)),
|
||||
Value::String(string) => out.push_str(string.as_str()),
|
||||
Value::Array(array) => {
|
||||
for v in array.iter() { out.push_str(&format!("{}\n", v.to_string())); }
|
||||
},
|
||||
Value::Boolean(boolean) => out.push_str(&format!("{:?}\n", boolean)),
|
||||
Value::Datetime(datetime) => out.push_str(&format!("{:?}\n", datetime)),
|
||||
Value::Float(float) => out.push_str(&format!("{:?}\n", float)),
|
||||
Value::Integer(int) => out.push_str(&format!("{:?}\n", int)),
|
||||
Value::String(string) => {
|
||||
let contents = string.to_owned();
|
||||
let mut lines: Vec<&str> = contents.lines().collect();
|
||||
if lines.last().unwrap().is_empty() { _ = lines.pop(); }
|
||||
|
||||
for line in lines.iter() { out.push_str(&format!("{}\n", line)); }
|
||||
},
|
||||
_ => return Err((format!("{:?}: No such key.", item), EX_DATAERR)),
|
||||
};
|
||||
}
|
||||
@ -125,11 +125,10 @@ fn rust_main(args: Args) {
|
||||
exit(EX_UNAVAILABLE);
|
||||
})
|
||||
},
|
||||
}.read_to_end(&mut content)
|
||||
.unwrap_or_else(|_| {
|
||||
}.read_to_end(&mut content).unwrap_or_else(|_| {
|
||||
eprintln!("{}: Could not read input.", argv[0]);
|
||||
exit(EX_OSERR);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
let mut tabkey: Vec<&str> = argv[1].split(".").collect();
|
||||
@ -164,7 +163,7 @@ fn rust_main(args: Args) {
|
||||
});
|
||||
|
||||
let valiter = tabkey.iter().peekable();
|
||||
println!(
|
||||
print!(
|
||||
"{}",
|
||||
match parse_toml(root, valiter, index) {
|
||||
Ok(val) => val,
|
||||
|
Loading…
Reference in New Issue
Block a user