No description
Find a file
2025-08-04 13:05:40 +07:00
src add full import data 2025-08-04 13:05:40 +07:00
.gitignore exclude DS_Store 2025-05-26 12:41:04 +07:00
Cargo.lock v0.1 init 2025-05-26 12:39:09 +07:00
Cargo.toml v0.1 init 2025-05-26 12:39:09 +07:00
README.md add examples 2025-07-31 13:03:20 +07:00

libtbr

libtbr is library for operating files especially for Taobin recipes. Provides a set of utilities for operations like querying, filtering, sorting, merging and more.

cargo add --git https://gitlab.forthrd.io/Pakin/libtbr.git
cargo update

Examples

Initialize Config

use libtbr::recipe_functions::common;

// this read file `.tbcfg` in the current directory
let cfg = common::get_config();

let recipe_dir = cfg.get("RECIPE_DIR").unwrap();

** Helper functions **

This will be included in the next version. So the following functions may just have to implement by yourself for now.


use std::collections::HashMap;
use std::fs::File;
use std::io::{self, Error, Read};

/// Get valid country names
fn valid_country_name() -> Vec<&'static str> {
    vec!["mys", "sgp", "aus", "tha", "hkg", "dubai", "uae"]
}

/// Get latest versions of recipes
fn grep_latest_versions(dir_path: &str) -> Result<HashMap<String, usize>, io::Error> {
    let mut vs = HashMap::new();

    // open dir
    let entries = std::fs::read_dir(dir_path)?
        .map(|res| res.map(|e| e.path()))
        .collect::<Result<Vec<_>, io::Error>>()?;

    for e in entries {
        let path = e.clone().to_str().unwrap().to_string();
        let mut cl_path = path.clone();
        let path_split = path.split("/").collect::<Vec<&str>>();
        let dir_name = path_split[path_split.len() - 1];

        if valid_country_name().contains(&dir_name) {
            cl_path.push_str("/version");

            // read filename
            let mut file = File::open(cl_path)?;
            let mut data = String::new();
            file.read_to_string(&mut data).unwrap();

            vs.insert(dir_name.to_string(), data.parse::<usize>().unwrap());
        }

        // expect dir with country
    }

    Ok(vs)
}

Get recipe from specific country (latest)

...
let latest_versions = grep_latest_versions(recipe_dir).unwrap();

// try get malaysia recipe, may fail if country does not exist
let mys_version = latest_versions.get("mys");
// try to create malaysia recipe model
let mys_recipe_model = common::create_recipe_model_from_file(common::create_recipe_path(
    "mys",
    *mys_version.unwrap(),
));

...

...WIP