Change with_setting to accept any JSON value
This commit is contained in:
parent
06a5eb2983
commit
f9451c09b9
|
@ -1,5 +1,6 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use crate::Value;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
/// Generate the page for GraphQL Playground
|
/// Generate the page for GraphQL Playground
|
||||||
|
@ -564,7 +565,7 @@ pub struct GraphQLPlaygroundConfig<'a> {
|
||||||
endpoint: &'a str,
|
endpoint: &'a str,
|
||||||
subscription_endpoint: Option<&'a str>,
|
subscription_endpoint: Option<&'a str>,
|
||||||
headers: Option<HashMap<&'a str, &'a str>>,
|
headers: Option<HashMap<&'a str, &'a str>>,
|
||||||
settings: Option<HashMap<&'a str, &'a str>>,
|
settings: Option<HashMap<&'a str, Value>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> GraphQLPlaygroundConfig<'a> {
|
impl<'a> GraphQLPlaygroundConfig<'a> {
|
||||||
|
@ -597,7 +598,17 @@ impl<'a> GraphQLPlaygroundConfig<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set Playground setting for per query.
|
/// Set Playground setting for per query.
|
||||||
pub fn with_setting(mut self, name: &'a str, value: &'a str) -> Self {
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use async_graphql::Value;
|
||||||
|
/// # use async_graphql::http::GraphQLPlaygroundConfig;
|
||||||
|
/// GraphQLPlaygroundConfig::new("/api/graphql")
|
||||||
|
/// .with_setting("setting", false)
|
||||||
|
/// .with_setting("other", Value::Null);
|
||||||
|
/// ```
|
||||||
|
pub fn with_setting(mut self, name: &'a str, value: impl Into<Value>) -> Self {
|
||||||
|
let value = value.into();
|
||||||
|
|
||||||
if let Some(settings) = &mut self.settings {
|
if let Some(settings) = &mut self.settings {
|
||||||
settings.insert(name, value);
|
settings.insert(name, value);
|
||||||
} else {
|
} else {
|
||||||
|
@ -608,3 +619,30 @@ impl<'a> GraphQLPlaygroundConfig<'a> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_with_setting_can_use_any_json_value() {
|
||||||
|
let settings = GraphQLPlaygroundConfig::new("")
|
||||||
|
.with_setting("string", "string")
|
||||||
|
.with_setting("bool", false)
|
||||||
|
.with_setting("number", 10)
|
||||||
|
.with_setting("null", Value::Null)
|
||||||
|
.with_setting("array", Vec::from([1,2,3]))
|
||||||
|
.with_setting("object", BTreeMap::new());
|
||||||
|
|
||||||
|
let json = serde_json::to_value(settings).unwrap();
|
||||||
|
let settings = json["settings"].as_object().unwrap();
|
||||||
|
|
||||||
|
assert!(settings["string"].as_str().is_some());
|
||||||
|
assert!(settings["bool"].as_bool().is_some());
|
||||||
|
assert!(settings["number"].as_u64().is_some());
|
||||||
|
assert!(settings["null"].as_null().is_some());
|
||||||
|
assert!(settings["array"].as_array().is_some());
|
||||||
|
assert!(settings["object"].as_object().is_some());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user