#document #storage #cbor #json

ledb-types

存储文档的基本类型

3个版本 (重大变更)

0.4.0 2020年6月11日
0.3.0 2019年9月6日
0.2.0 2018年10月27日

#2442 in 数据库接口

每月35次下载
3 crate 中使用

MIT 许可证

25KB
677

定义可存储文档的类型

License: MIT Travis-CI Build Status Appveyor Build status Crates.io Package Docs.rs API Documentation

这些类型和特质广泛用于可以使用持久存储(如 LEDB)管理的文档。

LEDB 是实现简单但高效、轻量但强大的文档存储的尝试。

缩写 LEDB 可以理解为轻量级嵌入式数据库、低端数据库、锂元素数据库、LE DB 等。

使用示例

use serde::{Serialize, Deserialize};
use ledb_types::{Document, Identifier, Primary, KeyFields, KeyType, IndexKind};

#[derive(Serialize, Deserialize)]
struct MyDoc {
    // define optional primary key field
    id: Option<Primary>,
    // define other fields
    title: String,
    tag: Vec<String>,
    timestamp: u32,
    // define nested document
    meta: MetaData,
}

#[derive(Serialize, Deserialize)]
struct MetaData {
    // define index field
    keywords: Vec<String>,
    // define other fields
    description: String,
}

impl Document for MyDoc {
    // declare primary key field name
    fn primary_field() -> Identifier {
        "id".into()
    }

    // declare other key fields
    fn key_fields() -> KeyFields {
        KeyFields::new()
            // add key fields of document
            .with_field(("title", KeyType::String, IndexKind::Unique))
            .with_field(("tag", KeyType::String, IndexKind::Index))
            .with_field(("timestamp", KeyType::Int, IndexKind::Unique))
            // add key fields from nested document
            .with_fields(MetaData::key_fields().with_parent("meta"))
    }
}

impl Document for MetaData {
    // declare key fields for index
    fn key_fields() -> KeyFields {
        KeyFields::new()
            // add key fields of document
            .with_field(("keywords", KeyType::String, IndexKind::Index))
    }
}

依赖关系

~0.4–1.3MB
~29K SLoC