rlay_plugin_interface/
lib.rs

1pub mod prelude {
2    pub use rlay_backend::{BoxFuture, GetEntity, ResolveEntity};
3    pub use rlay_ontology::ontology::Entity;
4    pub use serde_json::Value;
5
6    pub use super::FilterContext;
7    pub use super::RlayFilter;
8}
9
10use ambassador::delegatable_trait;
11use async_trait::async_trait;
12use rlay_backend::{GetEntity, ResolveEntity};
13use rlay_ontology::prelude::*;
14use serde_json::Value;
15use std::sync::Arc;
16
17pub trait FilterBackend: Send + Sync + GetEntity + ResolveEntity {}
18
19impl<T: Send + Sync + GetEntity + ResolveEntity> FilterBackend for T {}
20
21#[derive(Clone)]
22pub struct FilterContext {
23    pub backend: Arc<dyn FilterBackend>,
24    pub params: Value,
25}
26
27#[delegatable_trait]
28#[async_trait]
29pub trait RlayFilter {
30    fn filter_name(&self) -> &'static str;
31
32    async fn filter_entities(&self, ctx: FilterContext, entities: Vec<Entity>) -> Vec<bool>;
33}