Expand description
§mongo-derive
mongo-derive
is a procedural macro crate that simplifies working with MongoDB
in Rust applications. It generates update builders for your structs that make
it easy to create MongoDB update operations while maintaining type safety.
§Usage examples
§Basic usage with the MongoOperations
derive macro:
use mongo_derive::MongoOperations;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, MongoOperations)]
struct User {
#[mongo_ops(set)]
name: String,
#[mongo_ops(set, push, pull)]
tags: Vec<String>,
#[mongo_ops(none)]
password_hash: String, // Excluded from update builder
}
// Create an update document
let update = User::update_builder()
.set_name("John Doe".to_string())
.push_tags("rust".to_string())
.build()?;
// Use with MongoDB driver
// collection.update_one(query, update, None).await?;
§Working with nested fields:
use mongo_derive::{MongoOperations, mongo_nested_fields};
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Clone, MongoOperations)]
struct Address {
#[mongo_ops(set)]
city: String,
#[mongo_ops(set)]
street: String,
}
#[mongo_nested_fields(address: "Address", settings: "UserSettings")]
#[derive(Serialize, Deserialize, Clone, MongoOperations)]
struct User {
#[mongo_ops(set)]
name: String,
address: Address,
}
#[derive(Serialize, Deserialize, Clone, MongoOperations)]
struct UserSettings {
#[mongo_ops(set)]
theme: String,
}
// Update nested fields
let update = User::update_builder()
.with_address(|builder| {
builder.set_city("New York".to_string())
})
.address("zipcode", "10001".to_string())? // Direct path access
.build()?;
Attribute Macros§
- mongo_
nested_ fields - An attribute macro that generates methods for working with nested fields.
Derive Macros§
- Mongo
Operations - A derive macro that generates an update builder for a struct.