1mod info;
2pub mod macros;
3mod request;
4mod tests;
5mod types;
6
7use crate::info::hash::get_hash;
8use crate::info::runtime::get_runtime;
9use crate::info::stack_trace::get_stack_trace;
10use crate::info::system_usage::get_system_usage;
11use crate::info::thread::get_thread_id;
12use crate::info::time::get_time;
13use crate::request::make_request;
14use crate::types::{QuoContext, QuoPayload, QuoPayloadLanguage, QuoPayloadMeta, QuoPayloadVariable};
15pub use crate::types::QuoContext as __private_QuoContext;
16use std::fmt::Debug;
17
18#[cfg(debug_assertions)]
29#[doc(hidden)]
30fn quo_create_payload<T: Debug>(value: T, name: &str, ctx: QuoContext<'_>) -> QuoPayload {
31 let id = 0; let var_type_raw = std::any::type_name_of_val(&value).to_string();
33 let var_type = var_type_raw
34 .strip_prefix('&')
35 .unwrap_or(&var_type_raw)
36 .to_string();
37
38 let value_str = format!("{:?}", value);
39 let (time_epoch_ms, uid) = get_time();
40 let memory_address = Some(format!("{:p}", &value as *const T));
41 let grouping_hash = ctx.shared_grouping_hash.or_else(|| get_hash(&var_type_raw, name, ctx.package_name));
42 let (stack_trace, caller_function) = get_stack_trace();
43 let thread_info = get_thread_id();
44 let (cpu_usage, memory_usage) = get_system_usage();
45 let runtime = get_runtime();
46
47 QuoPayload {
48 language: QuoPayloadLanguage::Rust,
49 meta: QuoPayloadMeta {
50 origin: ctx.package_name.to_string(),
51 sender_origin: format!("{}:{}", ctx.file, ctx.line),
52 variable: QuoPayloadVariable {
53 var_type: var_type.clone(),
54 name: name.to_string(),
55 value: value_str,
56 is_constant: name == name.to_uppercase(),
57 is_mutable: ctx.is_mutable || var_type_raw.contains("&mut "),
58 is_expression: ctx.is_expression,
59 memory_address,
60 grouping_hash,
61 },
62 id,
63 uid,
64 time_epoch_ms,
65 stack_trace,
66 thread_info,
67 runtime,
68 cpu_usage,
69 memory_usage,
70 caller_function,
71 },
72 }
73}
74
75#[cfg(debug_assertions)]
86#[doc(hidden)]
87fn quo<T: Debug>(value: T, name: &str, ctx: QuoContext<'_>) {
88 #[cfg(debug_assertions)]
89 {
90 let env_host = option_env!("QUO_HOST").unwrap_or("http://127.0.0.1");
91 let env_port = option_env!("QUO_PORT").unwrap_or("7312");
92
93 let body = quo_create_payload(value, name, ctx);
94 let quo_server_address = format!("{}:{}/payload", env_host, env_port);
95
96 make_request(&quo_server_address, body);
97 }
98}
99
100#[cfg(debug_assertions)]
102#[doc(hidden)]
103pub fn __private_quo_grouping_hash(args_key: &str, package_name: &str) -> Option<String> {
104 get_hash("grouped", args_key, package_name)
105}
106
107#[cfg(debug_assertions)]
109#[doc(hidden)]
110pub fn __private_quo<T: Debug>(value: T, name: &str, ctx: QuoContext<'_>) {
111 quo(value, name, ctx)
112}