|  | 
| 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