2020-03-07 04:40:04 +00:00
|
|
|
use async_graphql::*;
|
2020-09-14 08:17:53 +00:00
|
|
|
use std::cmp::Ordering;
|
|
|
|
use std::collections::{BTreeSet, HashSet, LinkedList, VecDeque};
|
2020-03-07 04:40:04 +00:00
|
|
|
|
|
|
|
#[async_std::test]
|
|
|
|
pub async fn test_list_type() {
|
2020-09-18 00:52:13 +00:00
|
|
|
#[derive(InputObject)]
|
2020-03-07 04:40:04 +00:00
|
|
|
struct MyInput {
|
|
|
|
value: Vec<i32>,
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Root {
|
2020-09-14 08:17:53 +00:00
|
|
|
value_vec: Vec<i32>,
|
|
|
|
value_hash_set: HashSet<i32>,
|
|
|
|
value_btree_set: BTreeSet<i32>,
|
|
|
|
value_linked_list: LinkedList<i32>,
|
|
|
|
value_vec_deque: VecDeque<i32>,
|
2020-03-07 04:40:04 +00:00
|
|
|
}
|
|
|
|
|
2020-09-18 00:52:13 +00:00
|
|
|
#[Object]
|
2020-03-07 04:40:04 +00:00
|
|
|
impl Root {
|
|
|
|
async fn value_vec(&self) -> Vec<i32> {
|
2020-09-14 08:17:53 +00:00
|
|
|
self.value_vec.clone()
|
2020-03-07 04:40:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn value_slice(&self) -> &[i32] {
|
2020-09-14 08:17:53 +00:00
|
|
|
&self.value_vec
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn value_linked_list(&self) -> LinkedList<i32> {
|
|
|
|
self.value_linked_list.clone()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn value_hash_set(&self) -> HashSet<i32> {
|
|
|
|
self.value_hash_set.clone()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn value_btree_set(&self) -> BTreeSet<i32> {
|
|
|
|
self.value_btree_set.clone()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn value_vec_deque(&self) -> VecDeque<i32> {
|
|
|
|
self.value_vec_deque.clone()
|
2020-03-07 04:40:04 +00:00
|
|
|
}
|
|
|
|
|
2020-04-05 08:00:26 +00:00
|
|
|
async fn value_input_slice(&self, a: Vec<i32>) -> Vec<i32> {
|
|
|
|
a
|
|
|
|
}
|
|
|
|
|
2020-03-07 04:40:04 +00:00
|
|
|
async fn test_arg(&self, input: Vec<i32>) -> Vec<i32> {
|
|
|
|
input
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn test_input<'a>(&self, input: MyInput) -> Vec<i32> {
|
|
|
|
input.value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let schema = Schema::new(
|
|
|
|
Root {
|
2020-09-14 08:17:53 +00:00
|
|
|
value_vec: vec![1, 2, 3, 4, 5],
|
|
|
|
value_hash_set: vec![1, 2, 3, 4, 5].into_iter().collect(),
|
|
|
|
value_btree_set: vec![1, 2, 3, 4, 5].into_iter().collect(),
|
|
|
|
value_linked_list: vec![1, 2, 3, 4, 5].into_iter().collect(),
|
|
|
|
value_vec_deque: vec![1, 2, 3, 4, 5].into_iter().collect(),
|
2020-03-07 04:40:04 +00:00
|
|
|
},
|
2020-03-19 09:20:12 +00:00
|
|
|
EmptyMutation,
|
|
|
|
EmptySubscription,
|
2020-03-07 04:40:04 +00:00
|
|
|
);
|
|
|
|
let json_value: serde_json::Value = vec![1, 2, 3, 4, 5].into();
|
|
|
|
let query = format!(
|
|
|
|
r#"{{
|
2020-03-09 12:00:57 +00:00
|
|
|
valueVec
|
|
|
|
valueSlice
|
2020-09-14 08:17:53 +00:00
|
|
|
valueLinkedList
|
|
|
|
valueHashSet
|
|
|
|
valueBtreeSet
|
|
|
|
valueVecDeque
|
2020-03-09 12:00:57 +00:00
|
|
|
testArg(input: {0})
|
2020-04-05 08:00:26 +00:00
|
|
|
testInput(input: {{value: {0}}})
|
|
|
|
valueInputSlice1: valueInputSlice(a: [1, 2, 3])
|
|
|
|
valueInputSlice2: valueInputSlice(a: 55)
|
|
|
|
}}
|
2020-03-07 04:40:04 +00:00
|
|
|
"#,
|
|
|
|
json_value
|
|
|
|
);
|
2020-09-14 08:17:53 +00:00
|
|
|
let mut res = schema.execute(&query).await.data;
|
|
|
|
|
|
|
|
if let serde_json::Value::Object(obj) = &mut res {
|
|
|
|
if let Some(value_hash_set) = obj.get_mut("valueHashSet") {
|
|
|
|
if let serde_json::Value::Array(array) = value_hash_set {
|
|
|
|
array.sort_by(|a, b| {
|
|
|
|
if let (serde_json::Value::Number(a), serde_json::Value::Number(b)) = (a, b) {
|
|
|
|
if let (Some(a), Some(b)) = (a.as_i64(), b.as_i64()) {
|
|
|
|
return a.cmp(&b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ordering::Less
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-07 04:40:04 +00:00
|
|
|
assert_eq!(
|
2020-09-14 08:17:53 +00:00
|
|
|
res,
|
2020-03-07 04:40:04 +00:00
|
|
|
serde_json::json!({
|
2020-03-09 12:00:57 +00:00
|
|
|
"valueVec": vec![1, 2, 3, 4, 5],
|
|
|
|
"valueSlice": vec![1, 2, 3, 4, 5],
|
2020-09-14 08:17:53 +00:00
|
|
|
"valueLinkedList": vec![1, 2, 3, 4, 5],
|
|
|
|
"valueHashSet": vec![1, 2, 3, 4, 5],
|
|
|
|
"valueBtreeSet": vec![1, 2, 3, 4, 5],
|
|
|
|
"valueVecDeque": vec![1, 2, 3, 4, 5],
|
2020-03-09 12:00:57 +00:00
|
|
|
"testArg": vec![1, 2, 3, 4, 5],
|
|
|
|
"testInput": vec![1, 2, 3, 4, 5],
|
2020-04-05 08:00:26 +00:00
|
|
|
"valueInputSlice1": vec![1, 2, 3],
|
|
|
|
"valueInputSlice2": vec![55],
|
2020-03-07 04:40:04 +00:00
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|