Types for defining storable documents

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

This types and traits widely used for documents which can be managed using persistent storages like LEDB.

The LEDB is an attempt to implement simple but efficient, lightweight but powerful document storage.

The abbreviation LEDB may be treated as an Lightweight Embedded DB, also Low End DB, also Literium Engine DB, also LitE DB, and so on.

Links

Usage example

```rust extern crate serde;

[macrouse] extern crate serdederive;

extern crate ledb_types;

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

[derive(Serialize, Deserialize)]

struct MyDoc { // define optional primary key field id: Option, // define other fields title: String, tag: Vec, timestamp: u32, // define nested document meta: MetaData, }

[derive(Serialize, Deserialize)]

struct MetaData { // define index field keywords: Vec, // 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 keyfields() -> KeyFields { KeyFields::new() // add key fields of document .withfield(("keywords", KeyType::String, IndexKind::Index)) } } ```