WIP: custom #ingest#protocol parser #23
No reviewers
Labels
No labels
Вид/Баг
Вид/Безопасность
Вид/Документация
Вид/Изучение
Вид/Тестирование
Вид/Улучшение
Приоритет
Критический
Приоритет
Высокий
Приоритет
Низкий
Приоритет
Средний
Рассмотрено
Дубликат
Рассмотрено
Не будет исправленно
Рассмотрено
Неверно
Рассмотрено
Подтверждено
Совместимость/Сломанная
Статус
Заблокированно
Статус
Заброшено
Статус
Требуется больше информации
Тег/NarodMon Совместимость
Хорошая первая issue
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Blocks
#22 Переделка ingest_protocol парсера}
iotishnik/server
Reference: iotishnik/server#23
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "custom-parser"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #22
Это плохой код, не делайте так
Бтв парсинг мак-адреса сделан без библиотеки hex (см. последний коммит, успешно прое-ался с битовым сдвигом, подумал про BIN вместо HEX)
Во многих местах
.context()
выглядит громоздко. @nm17, можно как в thiserror просто конвертить в енум ошибки? В доках не нашёл@DarkCat09 wrote in #23 (comment):
Весь прикол в том, что допустим у тебя есть enum вариант с
source: T1
. Самого факта того, что у тебя что-то возвращаетResult<..., T1>
- мало, ибо у тебя в snafu может быть несколько вариантов сsource: T1
. Соответственно -.context()
повзоляет указать какой из них тебя интересует. Конечно, когда у тебя только один вариант сsource: T1
- то логично было бы автоматомimpl From<T1> for ErrorEnum
делать, но такого функционала у snafu нет, насколько я знаю. Мб оно и к лучшему, хз.Некоторое требует поправок и обсуждения
@ -20,2 +11,3 @@
use crate::ingest_protocol::{NMDeviceDataPacket, SensorValue};
let mut counter = 0;
pub fn parse_packet(mut input: &[u8]) -> Result<NMDeviceDataPacket, Error> {
Может быть всё-таки будем использовать Bytes для этого всего? Таким образом в Error сможем добавлять на каком именно куске всё пошло не по плану)
// из обсуждения в телеграме: я предлагал вариант с чтением напрямую из impl AsyncReadExt, но Даня верно заметил, что парсер не совсем этим должен заниматься => делаем с
bytes::Bytes
@ -136,0 +142,4 @@
Ok(packet)
}
pub fn parse_mac_address(input: &[u8]) -> Result<[u8; 6], Error> {
Точно ли хорошая идея избавиться от nom-like нотации поглощения и возвращения результата и остатков? Она как минимум нужна будет если захотим сделать парсинг нескольких пакетов в одном TCP подключении ( #11 ).
Как это будет в коде тцп-сервера? По-моему ты там всё равно будешь читать из потока до
##
и передавать вот эти байты в парсер, у него не будет остатков@ -29,3 +30,2 @@
assert_eq!(
parse_mac_address("12-34-AA-12-55-AA").unwrap(),
("", [18, 52, 170, 18, 85, 170])
parse_mac_address(b"12-34-Aa-1255-fA").unwrap(),
Хм, вижу решил сделать парсинг мака более универсальным, да?
Ага. Ну и лишние проверки при текущей логике парсера мака будут выглядеть некрасиво
@ -47,0 +40,4 @@
impl From<Error> for QSParserError {
fn from(value: Error) -> Self {
QSParserError::Parsing {
context: format!("{:?}", value),
Так, это вообще не пойдёт. Это было сделано как колхоз для того, чтобы не притягивать лайфтаймы в QSParserError, но теперь, так как у нас Error 'static, можно и нужно Error парсера перекидывать как source.
А, я это вообще не заметил, исправил только чтоб компилялось
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.