async_graphql/types/
empty_subscription.rs1use std::{borrow::Cow, pin::Pin};
2
3use futures_util::stream::{self, Stream};
4
5use crate::{Context, Response, ServerError, SubscriptionType, registry};
6
7#[derive(Default, Copy, Clone)]
12pub struct EmptySubscription;
13
14impl SubscriptionType for EmptySubscription {
15 fn type_name() -> Cow<'static, str> {
16 Cow::Borrowed("EmptySubscription")
17 }
18
19 fn create_type_info(registry: &mut registry::Registry) -> String {
20 registry.create_subscription_type::<Self, _>(|_| registry::MetaType::Object {
21 name: "EmptySubscription".to_string(),
22 description: None,
23 fields: Default::default(),
24 cache_control: Default::default(),
25 extends: false,
26 shareable: false,
27 resolvable: true,
28 keys: None,
29 visible: None,
30 inaccessible: false,
31 interface_object: false,
32 tags: Default::default(),
33 is_subscription: true,
34 rust_typename: Some(std::any::type_name::<Self>()),
35 directive_invocations: Default::default(),
36 requires_scopes: Default::default(),
37 })
38 }
39
40 fn is_empty() -> bool {
41 true
42 }
43
44 fn create_field_stream<'a>(
45 &'a self,
46 _ctx: &'a Context<'_>,
47 ) -> Option<Pin<Box<dyn Stream<Item = Response> + Send + 'a>>>
48 where
49 Self: Send + Sync + 'static + Sized,
50 {
51 Some(Box::pin(stream::once(async move {
52 let err = ServerError::new("Schema is not configured for subscription.", None);
53 Response::from_errors(vec![err])
54 })))
55 }
56}