rsiot/components/cmp_surrealdb/
config.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use surrealdb::Response;

use crate::message::Message;

/// Конфигурация cmp_surrealdb
#[derive(Clone, Debug)]
pub struct Config<TMsg> {
    /// localhost
    pub host: String,

    /// 8000
    pub port: u16,

    /// root
    pub user: String,

    /// root
    pub password: String,

    /// rsiot
    pub namespace: String,

    /// rsiot
    pub database: String,

    /// Скрипт для инициализации
    pub init_script: String,

    /// Конфигурация запросов на основе входных сообщений
    pub request_input: Vec<RequestInputConfig<TMsg>>,

    /// Конфигурация запросов, выполняющихся при запуске
    pub request_start: Vec<RequestStartConfig<TMsg>>,
}

pub type FnOnSuccess<TMessage> = fn(Response) -> Result<Vec<Message<TMessage>>, anyhow::Error>;
pub type FnOnFailure<TMessage> = fn() -> Vec<Message<TMessage>>;

/// Конфигурация запросов, которые выполняются на основе входного потока сообщений
#[derive(Clone, Debug)]
pub struct RequestInputConfig<TMsg> {
    /// Функция формирования запроса на основе потока сообщений
    pub fn_input: fn(&Message<TMsg>) -> Option<String>,
    /// Функция вызывается при успешно выполненном запросе
    pub fn_on_success: FnOnSuccess<TMsg>,
    /// Функция вызывается при ошибке выполнения запроса
    pub fn_on_failure: FnOnFailure<TMsg>,
}

/// Конфигурация запросов, которые выполняются один раз при запуске
#[derive(Clone, Debug)]
pub struct RequestStartConfig<TMsg> {
    /// Функция формирования запроса на основе потока сообщений
    pub query: String,
    /// Функция вызывается при успешно выполненном запросе
    pub fn_on_success: FnOnSuccess<TMsg>,
    /// Функция вызывается при ошибке выполнения запроса
    pub fn_on_failure: FnOnFailure<TMsg>,
}