Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/h2co3/avocado
Strongly-typed MongoDB driver for Rust
https://github.com/h2co3/avocado
bson bson-document database databases json json-schema mongo mongodb mongodb-driver
Last synced: 2 months ago
JSON representation
Strongly-typed MongoDB driver for Rust
- Host: GitHub
- URL: https://github.com/h2co3/avocado
- Owner: H2CO3
- License: mit
- Created: 2018-07-12T18:13:30.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-07-07T12:49:47.000Z (over 5 years ago)
- Last Synced: 2024-09-27T17:22:27.114Z (3 months ago)
- Topics: bson, bson-document, database, databases, json, json-schema, mongo, mongodb, mongodb-driver
- Language: Rust
- Size: 275 KB
- Stars: 81
- Watchers: 4
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Avocado, the strongly-typed MongoDB driver
[![Avocado on crates.io](https://img.shields.io/crates/v/avocado.svg)](https://crates.io/crates/avocado)
[![Avocado on docs.rs](https://docs.rs/avocado/badge.svg)](https://docs.rs/avocado)
[![rustc](https://img.shields.io/badge/rustc-1.32+-turquoise.svg)](https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html)
[![Avocado Download](https://img.shields.io/crates/d/avocado.svg)](https://crates.io/crates/avocado)
[![Avocado License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/H2CO3/avocado/blob/master/LICENSE.txt)
[![Lines of Code](https://tokei.rs/b1/github/H2CO3/avocado)](https://github.com/Aaronepower/tokei)
[![Twitter](https://img.shields.io/badge/twitter-@H2CO3_iOS-blue.svg?style=flat&colorB=64A5DE&label=Twitter)](http://twitter.com/H2CO3_iOS)[![goto counter](https://img.shields.io/github/search/H2CO3/avocado/goto.svg)](https://github.com/H2CO3/avocado/search?q=goto)
[![unsafe counter](https://img.shields.io/github/search/H2CO3/avocado/unsafe.svg)](https://github.com/H2CO3/avocado/search?q=unsafe)
[![fuck counter](https://img.shields.io/github/search/H2CO3/avocado/fuck.svg)](https://github.com/H2CO3/avocado/search?q=fuck)## Usage
* See the [online documentation](https://docs.rs/avocado) above, or open it locally:
* `cargo doc --open`
* Check out the [`examples/`](https://github.com/H2CO3/avocado/blob/master/examples/) folder
* More high-level information can be found on the [project page](https://h2co3.github.io/avocado/).
* The `schema_validation` feature can be enabled (it's enabled by default), in which case the `DatabaseExt::empty_collection()` method becomes available. If a collection is created using this method, it will add a JSON schema validation pass and specify the schema as generated by [`magnet`](https://github.com/H2CO3/magnet).
* The `raw_uuid` feature (also enabled by default) adds some useful extension methods to make it more convenient to work with UUIDs as the type of the `_id` field.**This can potentially be slow if you are performing many insertions into a collection of a complex type. However, it dynamically ensures that other users/drivers can't put malformed data in the collection.** Therefore it's probably more useful if you or somebody else are accessing a database from outside the Avocado driver too. It's also great for debugging Avocado itself.
## Changelog
### v0.6.0
* Fix [#6](https://github.com/H2CO3/avocado/issues/6) by adding a context dictionary to `Error`.
### v0.5.0
* Fix [#5](https://github.com/H2CO3/avocado/issues/5) by adding an `#[options(...)]` attribute to the `Doc` derive proc-macro.
### v0.4.0
* Fix [#2](https://github.com/H2CO3/avocado/issues/2) by adding a `&self` parameter to the `options()` methods on `ops::` traits.
### v0.3.3
* Fix a deprecation warning related to `Uuid::from_random_bytes()`
* Catch some errors that incorrectly pass through the MongoDB client's `Cursor` API### v0.3.2
* Added a `remove_inner_doc()` method to `DocumentExt`. This allows for the easy chaining of removal from hierarchically contained `Document`s in `transform()`.
* Fixed a bug where inserting 0 entities into a collection failed.
* Fixed the incorrect ordering of the key and the value type in the error message generated by `DocumentExt::remove_*()` methods.### v0.3.1
* Added a `DocumentExt` trait to the prelude for convenient and idiomatic implementation of `transform(raw: Document) -> Result` methods
* Hopefully fixed the code so that docs.rs can handle it now### v0.3.0
* Added `Doc::id()` and `Doc::set_id()` methods for the sake of better efficiency in some `Collection` methods
* This means that single-element wrappers such as `Box` and `RefCell` can no longer implement `Doc` themselves
* Added `Collection::find_one_and_delete()`, `Collection::find_one_and_replace()`, and `Collection::find_one_and_update()` methods
* Added more documentation and clarified/improved existing docs
* Added more tests, including compile-time tests for cases when `#[derive(Doc)]` should fail, as well as testing that an optional `_id` is correctly allowed## Compile-time testing the derive macro
Due to a bug in `compiletest_rs`, running the tests that check the error
messages of the `#[derive(Doc)]` proc-macro requires running `cargo clean`
first, otherwise compilation will fail with `E0464`.Therefore, the recommended way of running the tests is:
cargo clean && cargo test
## TODO:
* Add `weights` property to text indices
* Add migrations
* Default `Doc::Id` to `ObjectId` and `Query::Output` and `FindAndUpdate::Output` to `T`, once [#29661](https://github.com/rust-lang/rust/issues/29661) is stabilized