#events #trigger #arango-db #arango #real-time

arangodb_events_rs

使用 Rust 订阅 ArangoDB 数据库的实时事件

3 个版本

0.1.6 2022年8月16日
0.1.5 2022年8月15日
0.1.4 2022年8月12日

#1751数据库接口

MPL-2.0 许可证

42KB
664

ArangoDB Events

一个库,可以将触发器添加到您的 ArangoDB 数据库,当您的集合上发生事件(插入、更新、删除等)时。

crates.io Downloads Build Documentation

文档

功能

  • async 启用异步 Handler::call 方法

安装

将 crate 添加到您的 Cargo.toml

arangodb_events_rs = "0.1.6"

用法

use arangodb_events_rs::api::DocumentOperation;
use arangodb_events_rs::{Handler, Trigger, HandlerContextFactory};

pub struct GlobalHandler;

pub struct GlobalHandlerContext {
    pub data: u8,
}

impl Handler for GlobalHandler {
    type Context = GlobalHandlerContext;

    fn call(ctx: &GlobalHandlerContext, doc: &DocumentOperation) {
        println!("{}", ctx.data); // 10
    }
}

#[tokio::main]
async fn main() {
    let mut trigger = Trigger::new_auth(
        "https://127.0.0.1:8529/",
        "database",
        TriggerAuthentication::new("user", "password"),
    );

    trigger.subscribe::<GlobalHandler>(
        HandlerEvent::InsertOrReplace,
        HandlerContextFactory::from(GlobalHandlerContext {
            data: 10,
        })
    ); // This subscribes for all Insert or Replace operations on the database

    trigger.subscribe_to::<AccountHandler>(
        HandlerEvent::Remove,
        "accounts",
        HandlerContextFactory::from(AccountHandlerContext {
            data: 50,
        })
    ); // This is gonna listen only for Remove operations over accounts table

    trigger
        .init()
        .await
        .expect("Error initializing ArangoDB Trigger");

    loop {
        trigger
            .listen()
            .await
            .expect("Error on Trigger listener loop");
    }
}

依赖项

~7–20MB
~232K SLoC