Macro collection

Source
macro_rules! collection {
    ($collection_factory:ident; $opts:ident) => { ... };
    ($collection_factory:ident; $opts:ident; ($db_url:tt, $db_name:tt, $collection_name:tt)) => { ... };
}
Expand description

Creates a new factory to create a MongoDB collection

Create mongodb collection factory with standard environment variable for database url, database name and collection name

mongodb_macro::collection!(CollectionFactory; CollectionFactoryOpts);

fn main() {
    std::env::set_var("DB_URL", "mongodb://root:root@localhost:27017");
    std::env::set_var("DB_NAME", "test");
    std::env::set_var("COLLECTION_NAME", "users");
 
    let factory = CollectionFactory::parse();
 
    // let collection = factory.create<Bson>().await.expect("failed to connect");
}

Create mongodb collection factory with specified environment variable for database url, database name and collection name

mongodb_macro::collection!(CollectionFactory; CollectionFactoryOpts; ("MONGO_DB_URL", "MONGO_DB_NAME", "MONGO_COLLECTION_NAME"));

fn main() {
    std::env::set_var("MONGO_DB_URL", "mongodb://root:root@localhost:27017");
    std::env::set_var("MONGO_DB_NAME", "test");
    std::env::set_var("MONGO_COLLECTION_NAME", "users");
 
    let factory = CollectionFactory::parse();

    // let collection = factory.create<Bson>().await.expect("failed to connect");
}

Create a mongodb collection factory with nested environment variables into standard environment variables

mongodb_macro::collection!(CollectionFactory; CollectionFactoryOpts);

fn main() {
    std::env::set_var("MONGODB_HOST", "localhost");
    std::env::set_var("DB_URL", "mongodb://root:root@${MONGODB_HOST}:27017");
    std::env::set_var("DB_NAME", "test");
    std::env::set_var("COLLECTION_NAME", "users");
 
    let factory = CollectionFactory::parse();
 
    // let collection = factory.create<Bson>().await.expect("failed to connect");
 
    assert_eq!(&factory.config().db_url, "mongodb://root:root@localhost:27017");
}