Add support for Objects and Arrays as Record IDs
This commit is contained in:
parent
69c166fd8e
commit
eab862b9e4
2 changed files with 16 additions and 1 deletions
|
@ -1,8 +1,10 @@
|
||||||
use crate::cnf::ID_CHARS;
|
use crate::cnf::ID_CHARS;
|
||||||
|
use crate::sql::array::{array, Array};
|
||||||
use crate::sql::error::IResult;
|
use crate::sql::error::IResult;
|
||||||
use crate::sql::escape::escape_id;
|
use crate::sql::escape::escape_id;
|
||||||
use crate::sql::ident::ident_raw;
|
use crate::sql::ident::ident_raw;
|
||||||
use crate::sql::number::integer;
|
use crate::sql::number::integer;
|
||||||
|
use crate::sql::object::{object, Object};
|
||||||
use nanoid::nanoid;
|
use nanoid::nanoid;
|
||||||
use nom::branch::alt;
|
use nom::branch::alt;
|
||||||
use nom::combinator::map;
|
use nom::combinator::map;
|
||||||
|
@ -13,6 +15,8 @@ use std::fmt;
|
||||||
pub enum Id {
|
pub enum Id {
|
||||||
Number(i64),
|
Number(i64),
|
||||||
String(String),
|
String(String),
|
||||||
|
Object(Object),
|
||||||
|
Array(Array),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<i64> for Id {
|
impl From<i64> for Id {
|
||||||
|
@ -53,6 +57,8 @@ impl Id {
|
||||||
match self {
|
match self {
|
||||||
Id::Number(v) => v.to_string(),
|
Id::Number(v) => v.to_string(),
|
||||||
Id::String(v) => v.to_string(),
|
Id::String(v) => v.to_string(),
|
||||||
|
Id::Object(v) => v.to_string(),
|
||||||
|
Id::Array(v) => v.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,12 +68,19 @@ impl fmt::Display for Id {
|
||||||
match self {
|
match self {
|
||||||
Id::Number(v) => write!(f, "{}", v),
|
Id::Number(v) => write!(f, "{}", v),
|
||||||
Id::String(v) => write!(f, "{}", escape_id(v)),
|
Id::String(v) => write!(f, "{}", escape_id(v)),
|
||||||
|
Id::Object(v) => write!(f, "{}", v),
|
||||||
|
Id::Array(v) => write!(f, "{}", v),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn id(i: &str) -> IResult<&str, Id> {
|
pub fn id(i: &str) -> IResult<&str, Id> {
|
||||||
alt((map(integer, Id::Number), map(ident_raw, Id::String)))(i)
|
alt((
|
||||||
|
map(integer, Id::Number),
|
||||||
|
map(ident_raw, Id::String),
|
||||||
|
map(object, Id::Object),
|
||||||
|
map(array, Id::Array),
|
||||||
|
))(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -430,6 +430,8 @@ impl From<Id> for Value {
|
||||||
match v {
|
match v {
|
||||||
Id::Number(v) => v.into(),
|
Id::Number(v) => v.into(),
|
||||||
Id::String(v) => Strand::from(v).into(),
|
Id::String(v) => Strand::from(v).into(),
|
||||||
|
Id::Object(v) => v.into(),
|
||||||
|
Id::Array(v) => v.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue