parent
74c3b6d708
commit
6a3b1d99b5
4 changed files with 48 additions and 13 deletions
|
@ -101,19 +101,16 @@ pub fn table(_: &Context, mut args: Vec<Value>) -> Result<Value, Error> {
|
||||||
|
|
||||||
pub fn thing(_: &Context, mut args: Vec<Value>) -> Result<Value, Error> {
|
pub fn thing(_: &Context, mut args: Vec<Value>) -> Result<Value, Error> {
|
||||||
match args.len() {
|
match args.len() {
|
||||||
2 => {
|
2 => Ok(Value::Thing(Thing {
|
||||||
let tb = args.remove(0);
|
tb: args.remove(0).as_string(),
|
||||||
match args.remove(0) {
|
id: match args.remove(0) {
|
||||||
Value::Thing(id) => Ok(Value::Thing(Thing {
|
Value::Thing(v) => v.id,
|
||||||
tb: tb.as_string(),
|
Value::Array(v) => v.into(),
|
||||||
id: id.id,
|
Value::Object(v) => v.into(),
|
||||||
|
Value::Number(Number::Int(v)) => v.into(),
|
||||||
|
v => v.as_string().into(),
|
||||||
|
},
|
||||||
})),
|
})),
|
||||||
id => Ok(Value::Thing(Thing {
|
|
||||||
tb: tb.as_string(),
|
|
||||||
id: id.as_string().into(),
|
|
||||||
})),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1 => match args.remove(0) {
|
1 => match args.remove(0) {
|
||||||
Value::Thing(v) => Ok(v.into()),
|
Value::Thing(v) => Ok(v.into()),
|
||||||
_ => Ok(Value::None),
|
_ => Ok(Value::None),
|
||||||
|
|
|
@ -18,6 +18,7 @@ pub fn number(i: &str) -> IResult<&str, ()> {
|
||||||
map(char(')'), |_| ()),
|
map(char(')'), |_| ()),
|
||||||
map(char(']'), |_| ()),
|
map(char(']'), |_| ()),
|
||||||
map(char('}'), |_| ()),
|
map(char('}'), |_| ()),
|
||||||
|
map(char('"'), |_| ()),
|
||||||
map(char(';'), |_| ()),
|
map(char(';'), |_| ()),
|
||||||
map(char(','), |_| ()),
|
map(char(','), |_| ()),
|
||||||
map(tag(".."), |_| ()),
|
map(tag(".."), |_| ()),
|
||||||
|
|
|
@ -37,6 +37,18 @@ impl From<u64> for Id {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Array> for Id {
|
||||||
|
fn from(v: Array) -> Self {
|
||||||
|
Id::Array(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Object> for Id {
|
||||||
|
fn from(v: Object) -> Self {
|
||||||
|
Id::Object(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<String> for Id {
|
impl From<String> for Id {
|
||||||
fn from(v: String) -> Self {
|
fn from(v: String) -> Self {
|
||||||
Id::String(v)
|
Id::String(v)
|
||||||
|
@ -88,6 +100,15 @@ mod tests {
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn id_int() {
|
||||||
|
let sql = "001";
|
||||||
|
let res = id(sql);
|
||||||
|
assert!(res.is_ok());
|
||||||
|
let out = res.unwrap().1;
|
||||||
|
assert_eq!(Id::from(1), out);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn id_number() {
|
fn id_number() {
|
||||||
let sql = "100";
|
let sql = "100";
|
||||||
|
|
|
@ -166,6 +166,22 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn thing_integer() {
|
||||||
|
let sql = "test:001";
|
||||||
|
let res = thing(sql);
|
||||||
|
assert!(res.is_ok());
|
||||||
|
let out = res.unwrap().1;
|
||||||
|
assert_eq!("test:1", format!("{}", out));
|
||||||
|
assert_eq!(
|
||||||
|
out,
|
||||||
|
Thing {
|
||||||
|
tb: String::from("test"),
|
||||||
|
id: Id::from(1),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn thing_quoted_backtick() {
|
fn thing_quoted_backtick() {
|
||||||
let sql = "`test`:`id`";
|
let sql = "`test`:`id`";
|
||||||
|
|
Loading…
Reference in a new issue