rsiot/components/cmp_surrealdb/
config.rs

1use surrealdb::Response;
2
3use crate::message::Message;
4
5/// Конфигурация cmp_surrealdb
6#[derive(Clone, Debug)]
7pub struct Config<TMsg> {
8    /// localhost
9    pub host: String,
10
11    /// 8000
12    pub port: u16,
13
14    /// root
15    pub user: String,
16
17    /// root
18    pub password: String,
19
20    /// rsiot
21    pub namespace: String,
22
23    /// rsiot
24    pub database: String,
25
26    /// Скрипт для инициализации
27    pub init_script: String,
28
29    /// Конфигурация запросов на основе входных сообщений
30    pub request_input: Vec<RequestInputConfig<TMsg>>,
31
32    /// Конфигурация запросов, выполняющихся при запуске
33    pub request_start: Vec<RequestStartConfig<TMsg>>,
34}
35
36pub type FnOnSuccess<TMessage> = fn(Response) -> Result<Vec<Message<TMessage>>, anyhow::Error>;
37pub type FnOnFailure<TMessage> = fn() -> Vec<Message<TMessage>>;
38
39/// Конфигурация запросов, которые выполняются на основе входного потока сообщений
40#[derive(Clone, Debug)]
41pub struct RequestInputConfig<TMsg> {
42    /// Функция формирования запроса на основе потока сообщений
43    pub fn_input: fn(&Message<TMsg>) -> Option<String>,
44    /// Функция вызывается при успешно выполненном запросе
45    pub fn_on_success: FnOnSuccess<TMsg>,
46    /// Функция вызывается при ошибке выполнения запроса
47    pub fn_on_failure: FnOnFailure<TMsg>,
48}
49
50/// Конфигурация запросов, которые выполняются один раз при запуске
51#[derive(Clone, Debug)]
52pub struct RequestStartConfig<TMsg> {
53    /// Функция формирования запроса на основе потока сообщений
54    pub query: String,
55    /// Функция вызывается при успешно выполненном запросе
56    pub fn_on_success: FnOnSuccess<TMsg>,
57    /// Функция вызывается при ошибке выполнения запроса
58    pub fn_on_failure: FnOnFailure<TMsg>,
59}