Trait mongod::AsFilter

source ·
pub trait AsFilter<T: Filter> {
    // Required methods
    fn filter() -> T;
    fn into_filter(self) -> T;
}
Expand description

Used to tie a type implementing Collection to its companion Filter type.

§Examples

Tying User to its Filter.

use std::convert::TryFrom;

use mongod::bson::Document;
use mongod::{AsFilter, Filter, Comparator, Error};
use mongod::ext::bson::Bson;

#[derive(Bson, Mongo)]
#[mongo(collection="users")]
pub struct User {
    pub name: String,
}

#[derive(Default)]
pub struct UserFilter {
    pub name: Option<Comparator<String>>,
}

impl Filter for UserFilter {
    fn new() -> Self {
        Self::default()
    }

    fn into_document(self) -> Result<Document, Error> {
        let mut doc = Document::new();
        if let Some(value) = self.name {
            doc.insert("name", Bson::try_from(value)?.0);
        }
        Ok(doc)
    }
}

impl AsFilter<UserFilter> for User {
    fn filter() -> UserFilter {
        UserFilter::default()
    }

    fn into_filter(self) -> UserFilter {
        UserFilter {
            name: Some(Comparator::Eq(self.name)),
        }
    }
}

Required Methods§

source

fn filter() -> T

Returns the Collections filter.

source

fn into_filter(self) -> T

Converts the Collection instance into its filter.

Object Safety§

This trait is not object safe.

Implementors§