# odoo-api [github](https://github.com/ryanc-me/odoo-api-rs) [crates.io](https://crates.io/crates/odoo-api) [docs.rs](https://docs.rs/odoo-api/) [docs.rs](https://github.com/ryanc-me/odoo-api-rs/actions?query=branch%3Amaster) ## odoo_api The `odoo_api` crate provides a type-safe and full-coverage implementation of the Odoo JSON-RPC API, including ORM and Web methods. It supports sessioning, multi-database, async and blocking via [`reqwest`](https://docs.rs/reqwest/latest/reqwest/), and bring-your-own requests. ### API Methods For a full list of supported API methods, see [`odoo_api::service`](https://docs.rs/odoo-api/latest/odoo_api/service/index.html). ### Bring your own requests By default, `odoo_api` uses [`reqwest`](https://docs.rs/reqwest/latest/reqwest/) as its HTTP implementation. It is also possible to provide your own HTTP implementation (see [`OdooClient`](https://docs.rs/odoo-api/latest/odoo_api/struct.OdooClient.html) for more info). ### Example To use the default [`reqwest`](https://docs.rs/reqwest/latest/reqwest/) implementation, add this to your `Cargo.toml`: ```toml [dependencies] odoo_api = "0.2" ``` Then make your requests: ```rust use odoo_api::{OdooClient, jvec, jmap}; // build the client and authenticate let url = "https://demo.odoo.com"; let client = OdooClient::new_reqwest_async(url)? .authenticate( "some-database", "admin", "password", ).await?; // fetch a list of users let users = client.execute( "res.users", "search", jvec![] ).send().await?; // fetch the login and partner_id fields from user id=1 let info = client.execute_kw( "res.users", "read", jvec![[1]], jmap!{ "fields": ["login", "partner_id"] } ).send().await?; // fetch a list of databases let databases = client.db_list(false).send().await?; // fetch server version info let version_info = client.common_version().send().await?; ```