1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use async_trait::async_trait;
use cornucopia_async::GenericClient;

use crate::{Id, Organization, Result};

#[async_trait]
pub trait Filters {
    type Resolved: ResolvedFilters;

    async fn resolve(
        self,
        client: &impl GenericClient,
        organization_id: Id<Organization>,
    ) -> Result<Self::Resolved>;
}

pub trait ResolvedFilters {
    type Item;

    // Whether this item should be kept or filtered out
    fn keep(&self, item: &Self::Item) -> bool;
}