1 unstable release

0.1.0-beta.1 Jan 12, 2022

#2873 in Database interfaces

GPL-3.0 license

58KB
581 lines

Nongoose

Crates.io version Crates.io downloads License GitHub repository stars

ODM for MongoDB based on Mongoose and written in Rust

Basic usage

use nongoose::{bson::oid::ObjectId, Client, Schema};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Deserialize, Schema, Serialize)]
struct User {
  #[schema(id)]
  #[serde(rename = "_id")]
  pub id: ObjectId,

  #[schema(unique)]
  pub username: String,
}

#[tokio::main]
async fn main() {
  // Get MongoDB connection.
  let client = match Client::with_uri_str("mongodb://localhost:27017").await {
    Ok(client) => client,
    Err(e) => panic!("Error connecting to the database: {}", e),
  };

  // Nongoose instance.
  let nongoose = nongoose::Nongoose::build(client.database("nextchat"))
    .add_schema::<User>()
    .finish();

  let user = User {
    id: ObjectId::new(),
    username: String::from("nongoose"),
  };

  if let Err(error) = user.save().await {
    panic!("Cannot create the user: {}", error);
  }

  println!("User created in the database: {}", user.id);
}

Tests

# Sync tests
$ DATABASE_URL=mongodb://localhost:27017 cargo test --no-default-features --features derive,sync

# Async tests (Tokio runtime)
$ DATABASE_URL=mongodb://localhost:27017 cargo test

License

Check the COPYING file for more information.

Contributors

Thanks to this amazing people for make Nongoose better:

If you help to Nongoose feel free to add here.

Dependencies

~26–38MB
~696K SLoC