agentic_core/utils/
common.rs1use chrono::Utc;
2use uuid::Uuid;
3
4#[must_use]
5pub fn uuid7_str(prefix: &str) -> String {
6 format!("{}{}", prefix, Uuid::now_v7())
7}
8
9#[must_use]
10pub fn utcnow_str() -> i64 {
11 Utc::now().timestamp()
12}
13
14pub fn serialize_to_string<T: serde::Serialize>(value: &T) -> Result<String, serde_json::Error> {
23 serde_json::to_string(value)
24}
25
26pub fn serialize_to_value<T: serde::Serialize>(value: &T) -> Result<serde_json::Value, serde_json::Error> {
32 serde_json::to_value(value)
33}
34
35pub fn serialize_to_value_or_custom_default<T: serde::Serialize, R>(
42 value: &T,
43 message: &str,
44 then: impl FnOnce(serde_json::Value) -> R,
45 default: R,
46) -> R {
47 match serde_json::to_value(value) {
48 Ok(config) => then(config),
49 Err(error) => {
50 tracing::debug!(error = %error, message);
51 default
52 }
53 }
54}
55
56pub fn deserialize_from_str<T: serde::de::DeserializeOwned>(json_str: &str) -> Result<T, serde_json::Error> {
65 serde_json::from_str(json_str)
66}
67
68#[must_use]
73pub fn deserialize_from_str_or_default<T: serde::de::DeserializeOwned + Default>(json_str: &str) -> T {
74 serde_json::from_str(json_str).unwrap_or_default()
75}
76
77#[must_use]
82pub fn deserialize_from_str_opt<T: serde::de::DeserializeOwned>(json_str: &str) -> Option<T> {
83 serde_json::from_str(json_str).ok()
84}
85
86#[must_use]
90pub fn deserialize_from_string_opt_or_default<T: serde::de::DeserializeOwned + Default>(
91 json_str: &Option<String>,
92) -> T {
93 json_str
94 .as_ref()
95 .and_then(|s| deserialize_from_str_opt::<T>(s))
96 .unwrap_or_default()
97}
98
99#[must_use]
103pub fn deserialize_from_string_opt<T: serde::de::DeserializeOwned>(json_str: &Option<String>) -> Option<T> {
104 json_str.as_ref().and_then(|s| deserialize_from_str_opt::<T>(s))
105}
106
107pub fn deserialize_from_value<T: serde::de::DeserializeOwned>(
113 value: serde_json::Value,
114) -> Result<T, serde_json::Error> {
115 serde_json::from_value(value)
116}
117
118pub fn deserialize_from_value_or_custom_default<T: serde::de::DeserializeOwned, R>(
124 value: serde_json::Value,
125 message: &str,
126 then: impl FnOnce(T) -> R,
127 default: R,
128) -> R {
129 match serde_json::from_value(value) {
130 Ok(value) => then(value),
131 Err(error) => {
132 tracing::debug!(error = %error, message);
133 default
134 }
135 }
136}
137
138#[must_use]
140pub fn deserialize_from_value_opt<T: serde::de::DeserializeOwned>(value: serde_json::Value) -> Option<T> {
141 serde_json::from_value(value).ok()
142}
143
144#[must_use]
146pub fn serialize_to_vec_or_default<T: serde::Serialize>(value: &T) -> Vec<u8> {
147 serde_json::to_vec(value).unwrap_or_default()
148}