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}