tracing_layer_core/
lib.rs

1use std::fmt::Debug;
2
3use serde_json::Value;
4use tracing::Level;
5
6pub use filters::EventFilters;
7pub use worker::BackgroundWorker;
8pub use worker::WorkerMessage;
9
10// mod aws_lambda;
11pub mod filters;
12pub mod layer;
13mod worker;
14
15pub type ChannelSender = tokio::sync::mpsc::UnboundedSender<WorkerMessage>;
16pub type ChannelReceiver = tokio::sync::mpsc::UnboundedReceiver<WorkerMessage>;
17
18/// Send a message to a webhook endpoint.
19pub trait WebhookMessage: Debug + Send + Sync {
20    fn webhook_url(&self) -> &str;
21    fn serialize(&self) -> String;
22}
23
24pub trait WebhookMessageFactory {
25    fn create(inputs: WebhookMessageInputs) -> impl WebhookMessage;
26}
27
28/// The data expected to be available for message producers.
29pub struct WebhookMessageInputs {
30    pub app_name: String,
31    pub message: String,
32    pub target: String,
33    pub span: String,
34    pub metadata: String,
35    pub webhook_url: String,
36    pub source_line: u32,
37    pub source_file: String,
38    pub event_level: Level,
39}
40
41#[allow(dead_code)]
42#[derive(Clone, Debug)]
43pub enum WebhookMessageSpec {
44    TextNoEmbed(String),
45    TextWithEmbed(String, Vec<Value>),
46    EmbedNoText(Vec<Value>),
47}
48
49pub trait Config {
50    fn webhook_url(&self) -> &str;
51
52    fn new_from_env() -> Self
53    where
54        Self: Sized;
55}
56
57#[cfg(test)]
58mod tests {}