arrays!!!!!
This commit is contained in:
parent
eb76b0b30d
commit
3ec60dbc04
68
src/main.rs
68
src/main.rs
@ -20,6 +20,7 @@ use std::fs::File;
|
|||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use toml::Value;
|
use toml::Value;
|
||||||
|
|
||||||
@ -27,7 +28,7 @@ fn main() {
|
|||||||
let mut arguments: Vec<String> = env::args().collect();
|
let mut arguments: Vec<String> = env::args().collect();
|
||||||
let argv0 = arguments.remove(0);
|
let argv0 = arguments.remove(0);
|
||||||
if arguments[1].is_empty() {
|
if arguments[1].is_empty() {
|
||||||
println!("Usage: {} [table...].[value] [file...]", argv0);
|
eprintln!("Usage: {} [table...].[value] [file...]", argv0);
|
||||||
process::exit(64); // sysexits(3) EX_USAGE
|
process::exit(64); // sysexits(3) EX_USAGE
|
||||||
}
|
}
|
||||||
let input = &arguments[1];
|
let input = &arguments[1];
|
||||||
@ -38,7 +39,22 @@ fn main() {
|
|||||||
File::open(file).unwrap().read_to_string(&mut content).unwrap();
|
File::open(file).unwrap().read_to_string(&mut content).unwrap();
|
||||||
} else { content = input.to_string(); }
|
} else { content = input.to_string(); }
|
||||||
|
|
||||||
let tabkey: Vec<&str> = arguments[0].split(".").collect();
|
let mut tabkey: Vec<&str> = arguments[0].split(".").collect();
|
||||||
|
let mut indexvec: Vec<&str> = tabkey[1].split(&['[', ']'][..]).collect();
|
||||||
|
|
||||||
|
tabkey[1] = indexvec.remove(0);
|
||||||
|
let mut index: usize = 0;
|
||||||
|
if ! indexvec.is_empty() {
|
||||||
|
let istr = indexvec.remove(0);
|
||||||
|
match usize::from_str(istr) {
|
||||||
|
Ok(i) => index = i,
|
||||||
|
Err(_) => {
|
||||||
|
eprintln!("{}: {}: Cannot index by given value.", argv0, istr);
|
||||||
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
let mut root = content.parse::<Value>().unwrap();
|
let mut root = content.parse::<Value>().unwrap();
|
||||||
|
|
||||||
let mut out = String::new();
|
let mut out = String::new();
|
||||||
@ -49,26 +65,60 @@ fn main() {
|
|||||||
Some(value) => {
|
Some(value) => {
|
||||||
match value {
|
match value {
|
||||||
// TODO: Implement other type parsing
|
// TODO: Implement other type parsing
|
||||||
Value::Array(_array) => {},
|
Value::Array(array) => {
|
||||||
|
match valiter.peek() {
|
||||||
|
Some(_) => {
|
||||||
|
eprintln!("{}: {}: Not a table.", argv0, item);
|
||||||
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
match array.get(index) {
|
||||||
|
Some(element) => {
|
||||||
|
match element.as_str() {
|
||||||
|
Some(val) => out.push_str(val),
|
||||||
|
None => {
|
||||||
|
eprintln!(
|
||||||
|
"{}: {:?}: No value at given index.", argv0, index
|
||||||
|
);
|
||||||
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
eprintln!(
|
||||||
|
"{}: {:?}: No value at given index.", argv0, index
|
||||||
|
);
|
||||||
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
Value::Boolean(_boolean) => {},
|
Value::Boolean(_boolean) => {},
|
||||||
Value::Datetime(_datetime) => {},
|
Value::Datetime(_datetime) => {},
|
||||||
Value::Float(_float) => {},
|
Value::Float(_float) => {},
|
||||||
Value::Integer(_int) => {},
|
Value::Integer(_int) => {},
|
||||||
Value::String(string) => {
|
Value::String(string) => {
|
||||||
match valiter.peek() {
|
match valiter.peek() {
|
||||||
Some(next) => {
|
Some(_) => {
|
||||||
println!("{}: {}: Not a table.", argv0, item);
|
eprintln!("{}: {}: Not a table.", argv0, item);
|
||||||
process::exit(65); // sysexits(3) EX_DATAERR
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
},
|
},
|
||||||
None => out.push_str(string.as_str()),
|
None => out.push_str(string.as_str()),
|
||||||
};
|
};
|
||||||
break
|
},
|
||||||
}
|
Value::Table(table) => {
|
||||||
Value::Table(table) => root = toml::Value::Table(table.to_owned()),
|
match valiter.peek() {
|
||||||
|
Some(_) => {
|
||||||
|
root = toml::Value::Table(table.to_owned());
|
||||||
|
},
|
||||||
|
None => {}, // out.push_str(table.as_str()),
|
||||||
|
};
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
println!("{}: {}: No such table or key.", argv0, item);
|
eprintln!("{}: {}: No such table or key.", argv0, item);
|
||||||
process::exit(65); // sysexits(3) EX_DATAERR
|
process::exit(65); // sysexits(3) EX_DATAERR
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user