webserver_base/
frontend_error_logger.rs

1use serde::{Deserialize, Serialize};
2use tracing::{error, instrument};
3
4#[derive(Debug, Serialize, Deserialize)]
5#[serde(deny_unknown_fields, rename_all = "camelCase")]
6pub struct FrontendErrorPayload {
7    source_file: Option<String>,
8    line_number: Option<i32>,
9    column_number: Option<i32>,
10
11    message: Option<String>,
12    stack_trace: Option<String>,
13    current_url: Option<String>,
14    timestamp: Option<String>,
15}
16
17impl FrontendErrorPayload {
18    /// # Panics
19    ///
20    /// Panics if the `FrontendErrorPayload` cannot be serialized.
21    #[instrument(skip_all)]
22    pub fn log(&self) {
23        error!(
24            "{}",
25            serde_json::to_string_pretty(self).unwrap_or_else(|_| { panic!("{self:?}") })
26        );
27    }
28}