diff --git a/rust/src/log/mod.rs b/rust/src/log/mod.rs index be7b64f..041f10c 100644 --- a/rust/src/log/mod.rs +++ b/rust/src/log/mod.rs @@ -1,5 +1,6 @@ -use std::{collections::HashMap, sync::Mutex}; +use std::{collections::{BTreeMap, HashMap}, sync::Mutex}; use serde::Serialize; +use strum::{EnumIter, IntoEnumIterator}; use strum_macros::IntoStaticStr; use esp_idf_svc::systime::EspSystemTime; @@ -129,7 +130,7 @@ mod tests { -#[derive(IntoStaticStr)] +#[derive(IntoStaticStr, EnumIter, Serialize, PartialEq, Eq, PartialOrd, Ord, Clone)] pub enum LogMessage { #[strum(serialize = "Reset due to {{txt_long}} requires rtc clear {{a}} and force config mode {{b}}")] reset_reason, @@ -155,4 +156,15 @@ pub enum LogMessage { mqtt_stay_alive_rec, #[strum(serialize = "Unknown topic recieved {{txt_long}}")] unknown_topic, -} \ No newline at end of file +} + +impl LogMessage { + pub fn to_log_localisation_config() -> BTreeMap { + let mut data = BTreeMap::new(); + for msg_type in LogMessage::iter() { + let s: &'static str = msg_type.clone().into(); + data.insert(msg_type, s); + } + data + } +} diff --git a/rust/src/webserver/webserver.rs b/rust/src/webserver/webserver.rs index 9245bb1..3aec46e 100644 --- a/rust/src/webserver/webserver.rs +++ b/rust/src/webserver/webserver.rs @@ -5,7 +5,7 @@ use std::{ sync::{atomic::AtomicBool, Arc}, }; use crate::{ - espota::OtaUpdate, get_version, map_range_moisture, plant_hal::{FileInfo, PLANT_COUNT}, BOARD_ACCESS, + espota::OtaUpdate, get_version, log::LogMessage, map_range_moisture, plant_hal::{FileInfo, PLANT_COUNT}, BOARD_ACCESS }; use anyhow::bail; use chrono::DateTime; @@ -214,6 +214,10 @@ fn get_log( anyhow::Ok(Some(serde_json::to_string(&output)?)) } +fn get_log_localization_config() -> Result { + anyhow::Ok(serde_json::to_string(&LogMessage::to_log_localisation_config())?) +} + fn get_version_web( _request: &mut Request<&mut EspHttpConnection>, ) -> Result, anyhow::Error> { @@ -366,6 +370,11 @@ pub fn httpd(reboot_now: Arc) -> Box> { handle_error_to500(request, get_log) }) .unwrap(); + server.fn_handler("/log_localization", Method::Get, |request| { + cors_response(request, 200, &get_log_localization_config().unwrap()) + + }) + .unwrap(); server .fn_handler("/battery", Method::Get, |request| { handle_error_to500(request, get_battery_state)