1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use std::collections::HashMap;
pub use castle_shared_parser::Input;
pub type Inputs = HashMap<Box<str>, Input>;
pub type Projection = HashMap<Box<str>, Field>;
/// The query
///
/// ```gql
/// me {
/// first_name
/// profile_pic(
/// size: 100
/// ) as large_pic
/// profile_pic(size: 50) as small_pic
/// friends [
/// first_name
/// ]
/// }
/// ```
///
/// The returned json in theory should look like this:
///
/// ```json
/// {
/// "me": {
/// "first_name": "Albert",
/// "large_pic": "https://...",
/// "small_pic": "https://...",
/// "friends": [
/// {
/// "first_name": "Gerard"
/// },
/// {
/// "first_name": "Will"
/// }
/// ]
/// }
/// }
/// ```
#[derive(Debug, PartialEq)]
pub struct Field {
pub name: Box<str>,
pub inputs: Inputs,
/// Used to rename fields, eg:
/// `<original_field> as <renamed_field>`
pub rename: Option<Box<str>>,
pub kind: FieldKind,
}
#[derive(Debug, PartialEq)]
pub enum FieldKind {
Object(Projection),
List(Projection),
Field
}