rsiot

Crates.iorsiot
lib.rsrsiot
version0.0.82
sourcesrc
created_at2023-11-21 08:56:11.524988
updated_at2024-07-08 09:27:39.545908
descriptionМетакрейт, импортирующий все другие крейты через флаги feature
homepage
repositoryhttps://github.com/Konstantin-Dudersky/rsiot
max_upload_size
id1043912
size9,617,585
(Konstantin-Dudersky)

documentation

README

Компоненты для построения системы сбора, обработки и визуализации данных

Документация

Обзор

Описание

Компоненты представляют собой асинхронные функции. У всех функций три аргумента:

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:

Commit count: 497

cargo fmt