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;
#[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_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());
}
}