Skip to main content

poolster_core/
native.rs

1//! Poolster-owned interchange contracts. Parser implementation types stay in inputs.
2use serde::{Deserialize, Serialize};
3use std::collections::BTreeMap;
4/// Nullability belongs to each wrapper; presence belongs to its containing field.
5#[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}