versatile-data 0.116.0

A library for databases that has convenient datasets that group together commonly used fields and gives you the flexibility to create your own fields.
Documentation
#[cfg(test)]
#[test]
fn test5() {
    use versatile_data::*;

    let dir = "./vd-test5/";
    if std::path::Path::new(dir).exists() {
        std::fs::remove_dir_all(dir).unwrap();
    }

    let mut data = Data::new(dir, DataOption::default());
    let field_num = FieldName::new("num".into());

    futures::executor::block_on(async {
        data.insert(
            Activity::Active,
            Term::Default,
            Term::Default,
            [(field_num.clone(), "2".into())].into(),
        )
        .await;
        data.insert(
            Activity::Active,
            Term::Default,
            Term::Default,
            [(field_num.clone(), "2".into())].into(),
        )
        .await;
        data.insert(
            Activity::Active,
            Term::Default,
            Term::Default,
            [(field_num.clone(), "3".into())].into(),
        )
        .await;
        data.insert(
            Activity::Active,
            Term::Default,
            Term::Default,
            [(field_num.clone(), "5".into())].into(),
        )
        .await;
        data.insert(
            Activity::Active,
            Term::Default,
            Term::Default,
            [(field_num.clone(), "8".into())].into(),
        )
        .await;

        println!("\nmatch");
        for r in data
            .search_default()
            .search_field(field_num.clone(), &search::Field::Match(b"3".to_vec()))
            .result_with_sort(vec![Order::Asc(OrderKey::Serial)])
            .await
        {
            println!(
                "{} : {}",
                r,
                std::str::from_utf8(data.field_bytes(r, &field_num)).unwrap()
            );
        }

        println!("\nmin");
        for r in data
            .search_default()
            .search_field(field_num.clone(), &search::Field::Min(b"3".to_vec()))
            .result_with_sort(vec![Order::Asc(OrderKey::Serial)])
            .await
        {
            println!(
                "{} : {}",
                r,
                std::str::from_utf8(data.field_bytes(r, &field_num)).unwrap()
            );
        }
        println!("\nmax");
        for r in data
            .search_default()
            .search_field(field_num.clone(), &search::Field::Max(b"3".to_vec()))
            .result_with_sort(vec![Order::Asc(OrderKey::Serial)])
            .await
        {
            println!(
                "{} : {}",
                r,
                std::str::from_utf8(data.field_bytes(r, &field_num)).unwrap()
            );
        }

        println!("\nrange");
        for r in data
            .search_default()
            .search_field(
                field_num.clone(),
                &search::Field::Range(b"3".to_vec(), b"5".to_vec()),
            )
            .result_with_sort(vec![Order::Asc(OrderKey::Serial)])
            .await
        {
            println!(
                "{} : {}",
                r,
                std::str::from_utf8(data.field_bytes(r, &field_num)).unwrap()
            );
        }

        println!("\nrange bad");
        for r in data
            .search_default()
            .search_field(
                field_num.clone(),
                &search::Field::Range(b"5".to_vec(), b"3".to_vec()),
            )
            .result_with_sort(vec![Order::Asc(OrderKey::Serial)])
            .await
        {
            println!(
                "{} : {}",
                r,
                std::str::from_utf8(data.field_bytes(r, &field_num)).unwrap()
            );
        }

        println!("OK");
    });
}