use std::collections::HashSet;
use cheetah_string::CheetahString;
#[derive(Debug, Clone, Default)]
pub struct TraceTransferBean {
pub trans_data: CheetahString,
pub trans_key: HashSet<CheetahString>,
}
impl TraceTransferBean {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn with_data(trans_data: CheetahString, trans_key: HashSet<CheetahString>) -> Self {
Self { trans_data, trans_key }
}
#[inline]
pub fn set_trans_data(&mut self, trans_data: CheetahString) {
self.trans_data = trans_data;
}
#[inline]
pub fn trans_data(&self) -> &CheetahString {
&self.trans_data
}
#[inline]
pub fn set_trans_key(&mut self, trans_key: HashSet<CheetahString>) {
self.trans_key = trans_key;
}
#[inline]
pub fn trans_key(&self) -> &HashSet<CheetahString> {
&self.trans_key
}
#[inline]
pub fn trans_key_mut(&mut self) -> &mut HashSet<CheetahString> {
&mut self.trans_key
}
#[inline]
pub fn add_key(&mut self, key: CheetahString) -> bool {
self.trans_key.insert(key)
}
#[inline]
pub fn is_empty(&self) -> bool {
self.trans_data.is_empty() && self.trans_key.is_empty()
}
#[inline]
pub fn key_count(&self) -> usize {
self.trans_key.len()
}
}
#[cfg(test)]
mod tests {
use super::*;
use cheetah_string::CheetahString;
use std::collections::HashSet;
#[test]
fn test_new_creates_empty_bean() {
let bean = TraceTransferBean::new();
assert!(bean.trans_data.is_empty());
assert!(bean.trans_key.is_empty());
assert!(bean.is_empty());
}
#[test]
fn test_with_data_initializes_correctly() {
let data = CheetahString::from("trace_payload");
let mut keys = HashSet::new();
keys.insert(CheetahString::from("key1"));
let bean = TraceTransferBean::with_data(data.clone(), keys.clone());
assert_eq!(bean.trans_data(), &data);
assert_eq!(bean.trans_key(), &keys);
assert!(!bean.is_empty());
}
#[test]
fn test_setters_and_getters() {
let mut bean = TraceTransferBean::new();
let data = CheetahString::from("new_data");
let mut keys = HashSet::new();
keys.insert(CheetahString::from("key_a"));
bean.set_trans_data(data.clone());
bean.set_trans_key(keys.clone());
assert_eq!(bean.trans_data(), &data);
assert_eq!(bean.trans_key(), &keys);
}
#[test]
fn test_add_key_logic() {
let mut bean = TraceTransferBean::new();
let key = CheetahString::from("unique_key");
assert!(bean.add_key(key.clone()));
assert_eq!(bean.key_count(), 1);
assert!(!bean.add_key(key));
assert_eq!(bean.key_count(), 1);
}
#[test]
fn test_trans_key_mut() {
let mut bean = TraceTransferBean::new();
bean.trans_key_mut().insert(CheetahString::from("manual_key"));
assert!(bean.trans_key().contains(&CheetahString::from("manual_key")));
assert_eq!(bean.key_count(), 1);
}
#[test]
fn test_is_empty_conditions() {
let mut bean = TraceTransferBean::new();
assert!(bean.is_empty(), "Should be empty initially");
bean.set_trans_data(CheetahString::from("data"));
assert!(!bean.is_empty());
bean.set_trans_data(CheetahString::from(""));
bean.add_key(CheetahString::from("key"));
assert!(!bean.is_empty());
}
#[test]
fn test_clone_and_debug() {
let bean =
TraceTransferBean::with_data(CheetahString::from("data"), HashSet::from([CheetahString::from("key")]));
let cloned = bean.clone();
assert_eq!(bean.trans_data, cloned.trans_data);
let debug_str = format!("{:?}", bean);
assert!(debug_str.contains("TraceTransferBean"));
}
}