Skip to content

Commit fbb6f00

Browse files
authored
feat: Support parse extended json5 syntax (#92)
* feat: Support parse extended json5 syntax * fix clippy * fix * fix * fix parse string
1 parent 2fd9945 commit fbb6f00

File tree

8 files changed

+1131
-241
lines changed

8 files changed

+1131
-241
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ simd-json = "0.15.0"
4747
mockalloc = "0.1.2"
4848
criterion = "0.5.1"
4949
proptest = "1.7"
50+
json-five = "0.3.0"
5051

5152
[features]
5253
default = ["databend", "preserve_order", "arbitrary_precision"]

src/core/databend/de.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ impl<'de> Deserializer<'de> {
147147
Ok(Cow::Borrowed(s))
148148
}
149149

150-
fn read_payload_extension(&mut self, length: usize) -> Result<ExtensionValue> {
150+
fn read_payload_extension(&mut self, length: usize) -> Result<ExtensionValue<'_>> {
151151
let start = self.index;
152152
let end = self.index + length;
153153
let val = ExtensionValue::decode(&self.raw.data[start..end])?;

src/core/databend/util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ impl ExtensionValue<'_> {
439439
}
440440

441441
#[inline]
442-
pub(crate) fn decode(bytes: &[u8]) -> Result<ExtensionValue> {
442+
pub(crate) fn decode(bytes: &[u8]) -> Result<ExtensionValue<'_>> {
443443
let mut len = bytes.len();
444444
assert!(len > 0);
445445
len -= 1;

src/error.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ pub enum ParseErrorCode {
3636
InvalidSurrogateInHexEscape(u16),
3737
UnexpectedEndOfHexEscape,
3838
ObjectDuplicateKey(String),
39+
ObjectKeyInvalidNumber,
40+
ObjectKeyInvalidCharacter,
3941
}
4042

4143
pub type Result<T> = std::result::Result<T, Error>;
@@ -72,6 +74,12 @@ impl Display for ParseErrorCode {
7274
ParseErrorCode::ObjectDuplicateKey(key) => {
7375
write!(f, "duplicate object attribute \"{}\"", key)
7476
}
77+
ParseErrorCode::ObjectKeyInvalidNumber => {
78+
f.write_str("object attribute name cannot be a number")
79+
}
80+
ParseErrorCode::ObjectKeyInvalidCharacter => {
81+
f.write_str("object attribute name cannot be invalid character")
82+
}
7583
}
7684
}
7785
}

src/functions/scalar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1499,7 +1499,7 @@ impl RawJsonb<'_> {
14991499
/// let raw_jsonb = RawJsonb::new(&buf);
15001500
/// assert_eq!(raw_jsonb.as_extension_value().unwrap(), Some(ExtensionValue::Binary(&[1,2,3])));
15011501
/// ```
1502-
pub fn as_extension_value(&self) -> Result<Option<ExtensionValue>> {
1502+
pub fn as_extension_value(&self) -> Result<Option<ExtensionValue<'_>>> {
15031503
let jsonb_item = JsonbItem::from_raw_jsonb(*self)?;
15041504
match jsonb_item {
15051505
JsonbItem::Extension(data) => {

0 commit comments

Comments
 (0)