Skip to main content

txtx_gql/
lib.rs

1use juniper::RootNode;
2use mutation::Mutation;
3use query::Query;
4use std::{collections::BTreeMap, sync::Arc};
5use subscription::Subscription;
6use tokio::sync::RwLock;
7use txtx_addon_kit::types::frontend::{
8    ActionItemResponse, Block, BlockEvent, LogEvent, SupervisorAddonData,
9};
10
11pub mod mutation;
12pub mod query;
13pub mod subscription;
14pub mod types;
15
16pub use txtx_addon_kit as kit;
17
18#[derive(Clone, Debug)]
19pub struct Context {
20    pub protocol_name: String,
21    pub runbook_name: String,
22    pub supervisor_addon_data: Vec<SupervisorAddonData>,
23    pub runbook_description: Option<String>,
24    pub block_store: Arc<RwLock<BTreeMap<usize, Block>>>,
25    pub log_store: Arc<RwLock<Vec<LogEvent>>>,
26    pub block_broadcaster: tokio::sync::broadcast::Sender<BlockEvent>,
27    pub log_broadcaster: tokio::sync::broadcast::Sender<LogEvent>,
28    pub action_item_events_tx: tokio::sync::broadcast::Sender<ActionItemResponse>,
29}
30
31impl juniper::Context for Context {}
32
33pub type GraphqlSchema = RootNode<'static, Query, Mutation, Subscription>;
34
35pub fn new_graphql_schema() -> GraphqlSchema {
36    GraphqlSchema::new(Query, Mutation, Subscription)
37}