Expand description

Компонент для получения данных через HTTP server.

Ссылки:

Определение API

GET /messages

Получение коллекции всех сообщений.

GET /messages/<KEY>

Получение сообщения по ключу.

PUT /messages

Ввод сообщения. Значение передается в виде JSON в теле запроса.

Тестирование

См. файл insomnia.json в корне

Диаграмма

<sodipodi:namedview id=“namedview1” pagecolor=“#ffffff” bordercolor=“#000000” borderopacity=“0.25” inkscape:showpageshadow=“2” inkscape:pageopacity=“0.0” inkscape:pagecheckerboard=“true” inkscape:deskcolor=“#d1d1d1” inkscape:document-units=“px” showgrid=“true” inkscape:zoom=“1.448535” inkscape:cx=“607.85551” inkscape:cy=“1149.4372” inkscape:window-width=“2560” inkscape:window-height=“988” inkscape:window-x=“0” inkscape:window-y=“0” inkscape:window-maximized=“1” inkscape:current-layer=“g16-3” inkscape:export-bgcolor=“#64c564ff”> <inkscape:grid id=“grid1” units=“mm” originx=“-453.04329” originy=“-982.17717” spacingx=“0.99999998” spacingy=“1” empcolor=“#0099e5” empopacity=“0.30196078” color=“#0099e5” opacity=“0.14901961” empspacing=“5” dotted=“false” gridanglex=“30” gridanglez=“30” visible=“true” /> </sodipodi:namedview> component-http-server stream1 stream2 HTTP client cache get resp put get req

Пример

use serde::{Deserialize, Serialize};
use tokio::{main, time::Duration};
use tracing::Level;
use tracing_subscriber::filter::LevelFilter;

use rsiot_component_core::ComponentChain;
use rsiot_extra_components::{cmp_inject_periodic, cmp_logger};
use rsiot_http_server::cmp_http_server;
use rsiot_messages_core::IMessage;

#[derive(Clone, Debug, Deserialize, Serialize)]
enum Message {
    Message0(f64),
    Message1(f64),
    CombineMessage(f64, f64),
}

impl IMessage for Message {
    fn into_eav(self) -> Vec<rsiot_messages_core::eav::EavModel> {
        todo!()
    }
}

#[main]
async fn main() {
    tracing_subscriber::fmt()
        .with_max_level(LevelFilter::DEBUG)
        .init();

    let mut counter = 0.0;

    let mut chain = ComponentChain::new(100)
        .add_cmp(cmp_inject_periodic::new(cmp_inject_periodic::Config {
            period: Duration::from_secs(2),
            fn_periodic: move || {
                let msg1 = Message::Message0(counter);
                let msg2 = Message::Message1(counter * 2.0);
                counter += 1.0;
                vec![msg1, msg2]
            },
        }))
        .add_cmp(cmp_http_server::new(cmp_http_server::Config { port: 8011 }))
        .add_cmp(cmp_logger::create(cmp_logger::Config {
            level: Level::INFO,
            header: "".into(),
        }));

    chain.spawn().await;
}

Structs

  • Конфигурация компонента http-server

Functions