Home
Softono

Openfoodfacts Rust

Open source Apache-2.0 Rust
22
Stars
7
Forks
11
Issues
4
Watchers
2 months
Last Commit

 About Openfoodfacts Rust

Rust SDK package

Platforms

Web Self-hosted

Languages

Rust

Links

Need Help Installing Openfoodfacts Rust?

We provide expert installation service for this software. Our team will install, configure, and secure Openfoodfacts Rust on your server. plans start at just $30.

Openfoodfacts Rust

View on GitHub

openfoodfacts-rust

This implements a wrapper around Open Food Facts API in Rust. Wiki page with a link to the Rust discussion channel: https://wiki.openfoodfacts.org/API/Rust

GitHub Super-Linter maintenance-status

Installation

In the Cargo.toml file, under [dependencies], add the following lines:

openfoodfacts = { git = "https://github.com/openfoodfacts/openfoodfacts-rust.git"}
reqwest = {version = "0.11", features = ["blocking", "json"]}
serde_json = "1.0.73"

Examples

Get information about a product

let client = off::v0().build().unwrap();
let code = "3850102123681";

let response = client.product(code, None).unwrap();
let result_json = json!(response.json::<HashMap::<String, Value>>().unwrap());

Search products based on criteria

use openfoodfacts::{self as off, Locale, Output};
use serde_json::{json, Value};
use std::collections::HashMap;


fn main() {
    // create client and query with criteria
    let client = off::v2().build().unwrap();
    let query = client
        .query()
        .criteria("brands", "Vindija", Some("hr"));

    // run query and convert result as json
    let res = client.search(query, None).unwrap();
    let result_json = json!(res.json::<HashMap::<String, Value>>().unwrap());

    // parse json
    if let Some(products) = result_json["products"].as_array() {
        println!("That many products {}", products.len());
        for product in products {
            println!("Barcode: {}, name: {}, allergens: {}.", product["code"], product["product_name"], product["allergens"]);
        }
    }
}

More details about criteria here: https://openfoodfacts.github.io/documentation/docs/Product-Opener/api/#5Filtering

Features

Refer to the following API documentation: https://openfoodfacts.github.io/documentation/docs/Product-Opener/api/

List of methods of the client.

features \ api version v-0 v-0 example v-2 v-2 example
2-Read product v let response = client.product("069000019832", None).unwrap();(); x x
3-Search / 5-Filtering search v let response = client.search(query, None).unwrap(); x let response = client.search(query, None).unwrap();
7-Metadata taxonomy v let response = client.taxonomy("nova_groups").unwrap(); x x
7-Metadata facet v let response = client.facet("allergens", None).unwrap(); x x
7-Metadata facet v let response = client.products_by("additive", "e322-lecithins", None).unwrap(); x x
7-Metadata categories v let response = client.categories(None).unwrap(); x x
7-Metadata categories v let response = client.products_by("category", "cheeses", None).unwrap(); x x
7-Metadata nutrients v let response = client.nutrients(None).unwrap(); x x

None can be replaced by output parameters (language (country code, cc; and optional language code, lc), page, page_size, fields (fields is used to reduce the response to only the fields you need)):

let output = Output::new()
    .locale(Locale::new("fr", None))
    .pagination(22, 20)
    .fields("url");

Whereas query can be created using criteria, ingredient, nutrient, as follows for v-0 and v-2, respectively:

let query = client
    .query()
    .criteria("brands", "contains", "Nestlé")
    .criteria("categories", "does_not_contain", "cheese")
    .ingredient("additives", "without")
    .ingredient("ingredients_that_may_be_from_palm_oil", "indifferent")
    .nutrient("fiber", "lt", 500)
    .nutrient("salt", "gt", 100);
let query = client
    .query()
    .criteria("brands", "Nestlé", Some("fr"))
    .criteria("categories", "-cheese", None)
    .nutrient_100g("fiber", "<", 500)
    .nutrient_serving("salt", "=", 100);

Third party applications

If you use this SDK, feel free to open a PR to add your application in this list.

Contributors

Drag Racing