#firestore #grpc #easy #client #json #management #play

fast_firestore

快速、即插即用的 Firestore 库

9 个版本

新版本 0.1.8 2024年8月15日
0.1.7 2024年6月8日
0.1.6 2023年10月3日
0.1.5 2023年9月1日
0.1.1 2023年3月22日

964数据库接口

Download history 145/week @ 2024-06-03 23/week @ 2024-06-10 73/week @ 2024-07-29 114/week @ 2024-08-12

每月 187 次下载

MITGPL-3.0 许可协议

67KB
1.5K SLoC

fast_firestore

快速、即插即用的 Firestore 库

这是一个使用 grpc 作为后端的快速、即插即用的 Firestore 库,无需管理令牌、认证或使用自定义数据管理 API,您可以使用 json crate 创建和编辑文档。它在 Rust 中的使用非常简单。

  • 管理 GCP 令牌
  • 基于 json 的对象管理
  • 所有核心 API
  • 不支持转换器
  • 所有原生 Firestore 数据类型仅支持读取,作为自定义 json 对象

use fast_firestore::{
    Error,DB,ApiV1,
    BatchWrite,BatchWriteOpp
};
use json::object;

pub async fn init(path:String,project_id:String)->Result<(),Error>{

    let mut client = DB::connect(path,project_id).await?;

    //add
    if false{
        if false {client.create_document(
            "",
            "users", "akku", &object!{
                "name":"akku",
                "age":25,
                "score":50
            }
        ).await?;}
        if false {client.create_document(
            "",
            "users", "akku1", &object!{
                "name":"akku1",
                "age":20,
                "score":60
            }
        ).await?;}
        if false {client.create_document(
            "",
            "users", "akku2", &object!{
                "name":"akku2",
                "age":23,
                "score":70
            }
        ).await?;}
        if false{
            if false{client.create_document(
                "/users/akku",
                "books", "king", &object!{
                    "book_name":"king",
                    "price":12,
                }
            ).await?;}
            if false{client.create_document(
                "/users/akku/books/king",
                "purchase", "india", &object!{
                    "units":5000,
                }
            ).await?;}
        }
    }

    //get
    if false{
        let res = client.get_document(
            "/users/akku/books/king"
        ).await?;
        println!("get : {:?}",res.json);
    }

    //update doc
    if false{
        let mut doc = client.get_document(
            "/users/akku1",
        ).await?;
        doc.json["score"] = 65.into();
        let update = doc.update(&mut client).await?;
        println!("update : {:?}",update);
    }

    //update
    if false{
        let update = client.update(
            "/users/akku1",
            &object!{
                "score":65
            }
        ).await?;
        println!("update : {:?}",update);
    }

    //delete
    if false{
        let res = client.delete_document(
            "/users/akku2"
        ).await?;
        println!("delete : {:?}",res);
    }

    //query
    if false{
        let mut query = DB::new_query();
        // query.parent("/users");
        query.from("users",true);
        query.add_where("age",">=",23.into());
        query.limit(2);
        let res = query.run(&mut client).await?;
        println!("query res : {:?}",res);
    }

    if false{
        let res = client.batch_read(vec![
            "/users/akku".to_string(),
            "/users/akku2".to_string(),
            "/users/akku1".to_string()
        ]).await?;
        println!("batch_read res : {:?}",res);
    }

    //=======================
    if false {client.create_document(
        "",
        "users", "akku2", &object!{
            "name":"akku2",
            "age":23,
            "score":70
        }
    ).await?;}

    if true{
        let res = client.batch_write(vec![
            BatchWriteOpp::Update(BatchWrite{
                path:"/users/akku3".to_string(),
                doc:object!{
                    age:23,
                    name:"akku3",
                    score:112
                }
            }),
            BatchWriteOpp::Update(BatchWrite{
                path:"/users/akku4".to_string(),
                doc:object!{
                    age:11,
                    name:"akku4",
                    score:119
                }
            }),
            BatchWriteOpp::Delete("/users/akku2".to_string())
        ]).await?;
        println!("batch_write res : {:?}",res);
    }

    return Ok(());

}

依赖项

~25–38MB
~606K SLoC