use crate::graphql_api::database::ReadDatabase;
use async_graphql::{
extensions::{
Extension,
ExtensionContext,
ExtensionFactory,
NextPrepareRequest,
},
Request,
ServerResult,
};
use std::sync::Arc;
pub(crate) struct ViewExtension;
impl ViewExtension {
pub fn new() -> Self {
Self
}
}
impl ExtensionFactory for ViewExtension {
fn create(&self) -> Arc<dyn Extension> {
Arc::new(ViewExtension::new())
}
}
#[async_trait::async_trait]
impl Extension for ViewExtension {
async fn prepare_request(
&self,
ctx: &ExtensionContext<'_>,
request: Request,
next: NextPrepareRequest<'_>,
) -> ServerResult<Request> {
let database: &ReadDatabase = ctx.data_unchecked();
let view = database.view();
let request = request.data(view);
next.run(ctx, request).await
}
}