async_odoors 1.0.0

Odoo JSON-RPC client async library
Documentation
use serde::Deserialize;

use async_odoors::odoo::{deserialize_odoo_nullable, Odoo};

#[derive(Deserialize, Debug)]
struct ProductTemplate {
    name: String,
    #[serde(deserialize_with = "deserialize_odoo_nullable")]
    default_code: Option<String>,
}

async fn get_odoo() -> Odoo {
    let odoo = Odoo::new("https://demo.odoo.com", "");
    let values = odoo.start().await.unwrap();
    Odoo::new_and_login(
        values.get("host").unwrap(),
        values.get("database").unwrap(),
        values.get("user").unwrap(),
        values.get("password").unwrap(),
    )
    .await
    .unwrap()
}

#[tokio::main]
async fn main() {
    let odoo: Odoo = get_odoo().await;

    let product_template: Vec<ProductTemplate> = odoo
        .search_read(
            "product.template",
            (),
            Some(vec!["name", "default_code"]),
            None,
            None,
        )
        .await
        .unwrap()
        .result;
    println!("{:?}", product_template);

    for product in product_template.iter() {
        println!(
            "[{}] {}",
            product.default_code.as_ref().unwrap_or(&String::from("")),
            product.name
        );
    }
}