junobuild_satellite/logs/
loggers.rs1use crate::logs::types::logs::{Log, LogLevel};
2use crate::random::runtime::random;
3use crate::{set_doc_store, SetDoc};
4use ic_cdk::api::time;
5use junobuild_collections::constants::db::COLLECTION_LOG_KEY;
6use junobuild_shared::ic::api::id;
7use junobuild_shared::types::core::Key;
8use junobuild_utils::encode_doc_data;
9use serde::Serialize;
10
11pub fn log(message: String) -> Result<(), String> {
21 set_log::<()>(LogLevel::Info, message, None)
22}
23
24pub fn log_with_data<T: Serialize>(message: String, data: &T) -> Result<(), String> {
35 set_log::<T>(LogLevel::Info, message, Some(data))
36}
37
38pub fn info(message: String) -> Result<(), String> {
42 set_log::<()>(LogLevel::Info, message, None)
43}
44
45pub fn info_with_data<T: Serialize>(message: String, data: &T) -> Result<(), String> {
47 set_log::<T>(LogLevel::Info, message, Some(data))
48}
49
50pub fn debug(message: String) -> Result<(), String> {
52 set_log::<()>(LogLevel::Debug, message, None)
53}
54
55pub fn debug_with_data<T: Serialize>(message: String, data: &T) -> Result<(), String> {
57 set_log::<T>(LogLevel::Debug, message, Some(data))
58}
59
60pub fn warn(message: String) -> Result<(), String> {
62 set_log::<()>(LogLevel::Warning, message, None)
63}
64
65pub fn warn_with_data<T: Serialize>(message: String, data: &T) -> Result<(), String> {
67 set_log::<T>(LogLevel::Warning, message, Some(data))
68}
69
70pub fn error(message: String) -> Result<(), String> {
72 set_log::<()>(LogLevel::Error, message, None)
73}
74
75pub fn error_with_data<T: Serialize>(message: String, data: &T) -> Result<(), String> {
77 set_log::<T>(LogLevel::Error, message, Some(data))
78}
79
80fn set_log<T: Serialize>(level: LogLevel, message: String, data: Option<&T>) -> Result<(), String> {
81 let nonce = random()?;
82
83 let key: Key = format!("{}-{}", time(), nonce);
84
85 let log_data = data.map(encode_doc_data).transpose()?;
86
87 let log: Log = Log {
88 level,
89 message,
90 data: log_data,
91 };
92
93 let doc: SetDoc = SetDoc {
94 description: None,
95 data: encode_doc_data(&log)?,
96 version: None,
97 };
98
99 set_doc_store(id(), COLLECTION_LOG_KEY.to_string(), key, doc)?;
100
101 Ok(())
102}