use crate::event::Event;
use serde::{Deserialize, Serialize};
use super::types::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchQueueRequested {
pub project_id: ResearchId,
}
impl Event for ResearchQueueRequested {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchStartRequested {
pub project_id: ResearchId,
}
impl Event for ResearchStartRequested {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchCancelRequested {
pub project_id: ResearchId,
}
impl Event for ResearchCancelRequested {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchProgressRequested {
pub project_id: ResearchId,
pub amount: f32,
}
impl Event for ResearchProgressRequested {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchCompleteRequested {
pub project_id: ResearchId,
}
impl Event for ResearchCompleteRequested {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchQueuedEvent {
pub project_id: ResearchId,
pub project_name: String,
pub cost: i64,
}
impl Event for ResearchQueuedEvent {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchStartedEvent {
pub project_id: ResearchId,
pub project_name: String,
}
impl Event for ResearchStartedEvent {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchCompletedEvent {
pub project_id: ResearchId,
pub project_name: String,
pub result: ResearchResult,
}
impl Event for ResearchCompletedEvent {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchProgressUpdatedEvent {
pub project_id: ResearchId,
pub progress: f32,
}
impl Event for ResearchProgressUpdatedEvent {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchCancelledEvent {
pub project_id: ResearchId,
pub project_name: String,
}
impl Event for ResearchCancelledEvent {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_event_serialization() {
let event = ResearchQueueRequested {
project_id: ResearchId::new("test"),
};
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("test"));
let deserialized: ResearchQueueRequested = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized.project_id.as_str(), "test");
}
#[test]
fn test_progress_requested() {
let event = ResearchProgressRequested {
project_id: ResearchId::new("test_project"),
amount: 0.5,
};
let json = serde_json::to_string(&event).unwrap();
let deserialized: ResearchProgressRequested = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized.project_id.as_str(), "test_project");
assert_eq!(deserialized.amount, 0.5);
}
}