mirror of
https://github.com/exchanges-lab/tradesync.git
synced 2026-08-06 05:34:49 +08:00
62 lines
1.7 KiB
Rust
62 lines
1.7 KiB
Rust
use crate::structs::SharedMessage;
|
|
use thiserror::Error;
|
|
use tracing::{debug, info};
|
|
|
|
/// Errors specific to ModuleA.
|
|
#[derive(Error, Debug)]
|
|
pub enum ModuleAError {
|
|
#[error("Failed to process message: {0}")]
|
|
ProcessError(String),
|
|
}
|
|
|
|
/// ModuleA processes messages and manages a name field.
|
|
pub struct ModuleA {
|
|
name: String,
|
|
}
|
|
|
|
impl ModuleA {
|
|
/// Creates a new ModuleA instance.
|
|
pub fn new(name: String) -> Result<Self, ModuleAError> {
|
|
info!(name = %name, "Initializing ModuleA");
|
|
Ok(Self { name })
|
|
}
|
|
|
|
/// Processes a shared message asynchronously.
|
|
pub async fn process_message(&self, msg: SharedMessage) -> Result<String, ModuleAError> {
|
|
debug!(msg_id = msg.id, "Processing message in ModuleA");
|
|
if msg.content.is_empty() {
|
|
return Err(ModuleAError::ProcessError(
|
|
"Empty message content".to_string(),
|
|
));
|
|
}
|
|
Ok(format!("ModuleA[{}] processed: {}", self.name, msg.content))
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[tokio::test]
|
|
async fn test_process_message_success() {
|
|
let module_a = ModuleA::new("test-a".to_string()).unwrap();
|
|
let msg = SharedMessage {
|
|
id: 42,
|
|
content: "Hello".to_string(),
|
|
};
|
|
let result = module_a.process_message(msg).await.unwrap();
|
|
assert_eq!(result, "ModuleA[test-a] processed: Hello");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_process_message_empty_content() {
|
|
let module_a = ModuleA::new("test-a".to_string()).unwrap();
|
|
let msg = SharedMessage {
|
|
id: 42,
|
|
content: String::new(),
|
|
};
|
|
let result = module_a.process_message(msg).await;
|
|
assert!(result.is_err());
|
|
}
|
|
}
|