74 releases
0.0.82 | Jul 8, 2024 |
---|---|
0.0.81 | Apr 17, 2024 |
0.0.78 | Mar 25, 2024 |
0.0.64 | Feb 29, 2024 |
0.0.16 | Nov 30, 2023 |
#238 in GUI
7.5MB
12K
SLoC
Contains (Zip file, 3MB) .xdp-..com.vivaldi.Vivaldi.Fs84b5-dWf6a8
Компоненты для построения системы сбора, обработки и визуализации данных
Обзор
Описание
Компоненты представляют собой асинхронные функции. У всех функций три аргумента:
async fn component<TMessage, TConfig>(
input: Option<tokio::sync::mpsc::Receiver<TMessage>>,
output: Option<tokio::sync::mpsc::Sender<TMessage>>,
config: TConfig,
) -> ()
where
TMessage: IMessage
{}
Сообщения между компонентами передаются через каналы "many producers to a single consumer"
библиотеки tokio
.
Входной или выходной потоки могут быть не заданы, поэтому каналы обернуты в Option.
Структура конфигурации типа TConfig
у каждого компонента своя.
Компоненты ничего не возвращают (точнее, возвращают тип ()
). Если в компоненте возникает
ошибка, логику перезапуска необходимо реализовать внутри данной функции. TODO - пересмотреть,
возможно стоит возвращать Result при критических ошибках.
Сообщения представляют собой тип enum, например:
use rsiot_messages_core::eav::EavModel;
use rsiot_messages_core::IMessage;
use serde::{Deserialize, Serialize};
[derive(Clone, Debug, Deserialize, Serialize)]
enum Message {
/// Текущее значение температуры
Temperature(f64),
/// Задание уставки
ChangeSetpoint(f64),
}
impl IMessage for Message {
fn into_eav(self) -> Vec<EavModel> {
vec![]
}}
Трейт IMessage
реализует основные методы - см. документацию по крейту
rsiot-messages-core
Для упрощения компоненты можно создавать и объединять в цепочку компонентов.
- может генерировать сообщения как на основе входных сообщений
- может генерировать сообщения периодически
Флаги feature
:
Dependencies
~5–56MB
~1M SLoC