H2CO3 / avocado

Strongly-typed MongoDB driver for Rust
MIT License
81 stars 2 forks source link

Statically typed filters? #8

Open 8176135 opened 5 years ago

8176135 commented 5 years ago

Is it possible to write statically typed filters? (e.g. similar to what diesel has or something else), and if not, is there any plans for them?

Something like:

#[derive(Debug, Serialize, Deserialize, Doc, Clone)]
pub struct Example {
    #[serde(rename = "_id")]
    pub id: Uid<Example>,
    pub description: String,
}

...

let example_col: Collection<Example>  = shared.db.existing_collection();
let res: Example = example_col.find_one(Example::description.eq("abc"));
H2CO3 commented 5 years ago

Hey there!

Unfortunately there's currently nothing like this in Avocado. However, this is certainly something I have thought about, except that I'm not sure how I would go about implementing it.

I'm guessing that a new derive macro could pre-generate helper types for most of the MongoDB DSL (i.e. query and update operators) based on top-level field names and types, but it might become tricky to refer to subfields.

I'd also really like to solve this problem because it would bring a whole new set of static guarantees to Avocado.