# nm17/iotishnik-server [Rust]
Стандартная структура проекта на Rust с Cargo.
Ниже описано содержимое `src/`.

- `main.rs`: точка входа, запускает сервер
  (см. [web_server](#web_server) и [ingest_socket_server](#ingest_socket_server))

## ingest_protocol
- `packet_types.rs`: структуры для хранения данных с датчиков,
  вспомогательные функции интеграции с serde и записи в БД.
- `parser.rs`: парсер пакетов в формате старого TCP/UDP API с #решётками#,
  парсер MAC-ов.
- `error.rs`: enum для ошибок в этом модуле.
- `tests/`: тесты.

## ingest_socket_server
Сервер TCP/UDP API (work in progress).

## web_server
Сервер HTTP API на библиотеке Ntex.

- `mod.rs`: предоставляет функцию запуска веб-сервера.
- `app_error.rs`: enum для ошибок в этом модуле.

### web_server/old_app_api
HTTP API "Народного мониторинга" для приложений.

- `handlers/`: обработчики запросов.
- `types/`: структуры JSON-а запросов и ответов.

### web_server/old_device_sensor_api
HTTP API "Народного мониторинга" для загрузки данных с датчиков на сервер.

- `mod.rs`: основной обработчик запросов.
- `qs_parser.rs`: парсер аргументов GET-запроса /
   тела POST-запроса в формате x-www-form-urlencoded.

### web_server/utils
- `mod.rs`: вспомогательные функции и макросы к веб-серверу.
- `redis.rs`: утилиты для работы с Redis-совместимой БД.

## utils
Вспомогательные структуры данных и функции.

- `mod.rs`: пока что только enum поддерживаемых единиц измерения, конвертация типов.
- `hifitime_serde.rs`: интеграция hifitime::Epoch с serde для (де)сериализации.