|
1 | 1 | use std::error::Error; |
2 | 2 |
|
3 | | -use gura::GuraType; |
4 | | - |
5 | 3 | use crate::format; |
6 | 4 | use crate::map::Map; |
7 | | -use crate::value::{Value, ValueKind}; |
| 5 | +use crate::value::Value; |
8 | 6 |
|
9 | 7 | pub fn parse( |
10 | 8 | uri: Option<&String>, |
11 | 9 | text: &str, |
12 | 10 | ) -> Result<Map<String, Value>, Box<dyn Error + Send + Sync>> { |
13 | | - let value = from_gura_value(uri, gura::parse(text).unwrap()); |
| 11 | + // Parse a Gura input from the provided text |
| 12 | + let value = format::from_parsed_value(uri, serde_gura::from_str(text)?); |
14 | 13 | format::extract_root_table(uri, value) |
15 | 14 | } |
16 | | - |
17 | | -fn from_gura_value(uri: Option<&String>, value: GuraType) -> Value { |
18 | | - let vk = match value { |
19 | | - GuraType::String(value) => ValueKind::String(value), |
20 | | - |
21 | | - GuraType::Integer(value) => ValueKind::I64(value as i64), |
22 | | - GuraType::BigInteger(value) => ValueKind::I128(value), |
23 | | - GuraType::Float(value) => ValueKind::Float(value), |
24 | | - |
25 | | - GuraType::Bool(value) => ValueKind::Boolean(value), |
26 | | - |
27 | | - GuraType::Object(table) => { |
28 | | - let m = table |
29 | | - .into_iter() |
30 | | - .map(|(k, v)| (k, from_gura_value(uri, v))) |
31 | | - .collect(); |
32 | | - |
33 | | - ValueKind::Table(m) |
34 | | - } |
35 | | - |
36 | | - GuraType::Array(array) => { |
37 | | - let l = array |
38 | | - .into_iter() |
39 | | - .map(|v| from_gura_value(uri, v)) |
40 | | - .collect(); |
41 | | - |
42 | | - ValueKind::Array(l) |
43 | | - } |
44 | | - |
45 | | - GuraType::Null => ValueKind::Nil, |
46 | | - |
47 | | - // Remaining types (only intended for internal use): |
48 | | - _ => ValueKind::Nil, |
49 | | - }; |
50 | | - |
51 | | - Value::new(uri, vk) |
52 | | -} |
0 commit comments