rsiot/components_config/uart_general/
fieldbus_request.rs

1use std::{fmt::Debug, time::Instant};
2
3use crate::components_config::master_device::RequestResponseBound;
4
5/// Структура отдельного запроса на коммуникацию по шине UART
6#[derive(Clone, Debug)]
7pub struct FieldbusRequest {
8    /// Время создания запроса.
9    ///
10    /// Можно контролировать время выполнения запросов
11    pub request_creation_time: Instant,
12
13    /// Данные для передачи по uart
14    pub packet: Vec<u8>,
15}
16
17impl FieldbusRequest {
18    /// Создание запроса
19    pub fn new(packet: Vec<u8>) -> Self {
20        Self {
21            request_creation_time: Instant::now(),
22            packet,
23        }
24    }
25
26    /// Восстановить запрос из буфера передачи по сети
27    pub fn from_read_buffer(read_buf: &[u8]) -> Self {
28        Self {
29            request_creation_time: Instant::now(),
30            packet: read_buf.to_vec(),
31        }
32    }
33
34    /// Подготовить запрос для передачи по сети
35    pub fn to_write_buffer(self) -> Vec<u8> {
36        self.packet
37    }
38}
39
40impl RequestResponseBound for FieldbusRequest {}