|
1 | 1 | use serde::{de, ser};
|
2 | 2 | use serde::ser::SerializeMap;
|
3 |
| -use std::collections::HashMap; |
4 | 3 | use std::fmt;
|
| 4 | +use std::collections::HashMap; |
5 | 5 |
|
6 | 6 | use ::{GraphQLError, Value};
|
7 | 7 | use ast::InputValue;
|
8 | 8 | use executor::ExecutionError;
|
9 | 9 | use parser::{ParseError, Spanning, SourcePosition};
|
10 | 10 | use validation::RuleError;
|
| 11 | +use serde_json::Value as Json; |
| 12 | + |
| 13 | + |
| 14 | +impl InputValue { |
| 15 | + /// Converts serde_json::Value to juniper::InputValue |
| 16 | + pub fn from_json(json: Json) -> InputValue { |
| 17 | + match json { |
| 18 | + Json::Number(num) => { |
| 19 | + if let Some(number) = num.as_i64() { |
| 20 | + InputValue::int(number) |
| 21 | + } |
| 22 | + else if let Some(number) = num.as_f64() { |
| 23 | + InputValue::float(number) |
| 24 | + } |
| 25 | + else if let Some(number) = num.as_u64() { |
| 26 | + InputValue::float(number as f64) |
| 27 | + } |
| 28 | + else { |
| 29 | + panic!("Invalid number data type was found."); |
| 30 | + } |
| 31 | + } |
| 32 | + Json::String(s) => InputValue::string(s), |
| 33 | + Json::Bool(b) => InputValue::boolean(b), |
| 34 | + Json::Array(a) => InputValue::list(a.into_iter().map(InputValue::from_json).collect()), |
| 35 | + Json::Object(o) => InputValue::object(o.into_iter().map(|(k, v)| (k, InputValue::from_json(v))).collect()), |
| 36 | + Json::Null => InputValue::null(), |
| 37 | + } |
| 38 | + } |
| 39 | +} |
11 | 40 |
|
12 | 41 | impl ser::Serialize for ExecutionError {
|
13 | 42 | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
0 commit comments