1use serde::{Deserialize, Serialize};
3use std::collections::BTreeMap;
4#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6pub struct ModelType {
7 pub nullable: bool,
8 pub kind: ModelKind,
9}
10#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
11pub enum ModelKind {
12 Scalar(String),
13 Enum(Vec<String>),
14 Named(String),
15 List(Box<ModelType>),
16 Object(Vec<ModelField>),
17 Union(Vec<ModelType>),
18 Literal(String),
19}
20#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
21pub struct ModelField {
22 pub name: String,
23 pub ty: ModelType,
24 pub optional: bool,
25 pub default_value: Option<String>,
26}
27#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
28pub enum GraphqlOperationKind {
29 Query,
30 Mutation,
31 Subscription,
32}
33#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
34pub struct GraphqlOperation {
35 pub name: String,
36 pub kind: GraphqlOperationKind,
37 pub document: String,
38 pub variables: Vec<ModelField>,
39 pub result: ModelType,
40}
41#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
42pub struct GraphqlOperations {
43 pub schema_source: String,
44 pub operation_source: String,
45 pub operations: Vec<GraphqlOperation>,
46 pub input_objects: BTreeMap<String, Vec<ModelField>>,
47}
48impl crate::engine::Contract for GraphqlOperations {
49 const NAME: &'static str = "poolster.graphql-operations.v1";
50}