[][src]Type Definition warpgrapher::engine::extensions::Extensions

type Extensions<GlobalCtx, RequestCtx> = Vec<Arc<dyn Extension<GlobalCtx, RequestCtx>>>;

Type alias for a thread-safe Extension vector.

Examples


#[derive(Clone, Debug)]
pub struct MetadataExtension<GlobalCtx, RequestCtx>
where
    GlobalCtx: GlobalContext,
    RequestCtx: RequestContext
{
    _gctx: PhantomData<GlobalCtx>,
    _rctx: PhantomData<RequestCtx>,
}

impl<GlobalCtx, RequestCtx> Extension<GlobalCtx, RequestCtx>
    for MetadataExtension<GlobalCtx, RequestCtx>
where
    GlobalCtx: GlobalContext,
    RequestCtx: RequestContext,
{

   fn pre_request_hook(
        &self,
        _op_name: Option<String>,
        _global_ctx: Option<&GlobalCtx>,
        request_ctx: RequestCtx,
        _headers: &HashMap<String, String>,
        _db_pool: DatabasePool
    ) -> Result<RequestCtx, Box<dyn std::error::Error + Sync + Send>> {
       // Set values in request context, or take some other action
       Ok(request_ctx)
    }
}

let metadata_extension = MetadataExtension { _gctx: PhantomData, _rctx: PhantomData };
let extensions: Extensions<(), ()> = vec![Arc::new(metadata_extension)];