rsiot

Crates.iorsiot
lib.rsrsiot
version
sourcesrc
created_at2023-11-21 08:56:11.524988+00
updated_at2025-03-08 13:26:35.779259+00
descriptionМетакрейт, импортирующий все другие крейты через флаги feature
homepage
repositoryhttps://github.com/Konstantin-Dudersky/rsiot
max_upload_size
id1043912
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
(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