graphql-composition 0.12.2

An implementation of GraphQL federated schema composition
Documentation
use cynic_parser::values::ConstValue as ParserValue;

pub(super) trait IntoJson {
    fn into_json(self) -> Option<serde_json::Value>;
}

impl IntoJson for cynic_parser::values::ConstValue<'_> {
    fn into_json(self) -> Option<serde_json::Value> {
        use serde_json::Value;

        Some(match self {
            ParserValue::Int(i) => Value::Number(i.as_i64().into()),
            ParserValue::Float(i) => Value::Number(serde_json::Number::from_f64(i.value()).unwrap()),
            ParserValue::String(s) => Value::String(s.value().to_owned()),
            ParserValue::Boolean(b) => Value::Bool(b.value()),
            ParserValue::Null(_) => Value::Null,
            ParserValue::Enum(_enm) => return None,
            ParserValue::List(list) => Value::Array(
                list.items()
                    .map(|value| value.into_json())
                    .collect::<Option<Vec<_>>>()?,
            ),
            ParserValue::Object(obj) => Value::Object(
                obj.fields()
                    .map(|field| Some((field.name().to_owned(), field.value().into_json()?)))
                    .collect::<Option<serde_json::Map<_, _>>>()?,
            ),
        })
    }
}