use std::fmt::Debug;
use std::time::Duration;
use serde::{Deserialize, Serialize};
use crate::envelope::AgentId;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(bound = "PhaseId: Serialize + for<'de2> Deserialize<'de2>")]
pub struct PhaseChangedNoticePayload<PhaseId: Clone + Debug> {
pub new_phase: PhaseId,
pub previous_phase: Option<PhaseId>,
pub duration_hint: Option<Duration>,
pub reason: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(bound = "PhaseId: Serialize + for<'de2> Deserialize<'de2>")]
pub struct RequestPhaseTransitionPayload<PhaseId: Clone + Debug> {
pub target_phase: PhaseId,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct CountdownTickNoticePayload {
pub remaining_seconds: u32,
pub phase_context_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(bound = "AppID: Serialize + for<'de2> Deserialize<'de2>")]
pub struct EndTurnRequestPayload<AppID: AgentId> {
pub player_id: AppID,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(bound = "TurnActorId: Serialize + for<'de2> Deserialize<'de2>")]
pub struct TurnChangedNoticePayload<TurnActorId: Clone + Debug> {
pub new_turn_actor: Option<TurnActorId>,
pub previous_turn_actor: Option<TurnActorId>,
pub turn_number: u32,
pub time_limit_for_turn: Option<Duration>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RoundStartedNoticePayload {
pub round_number: u32,
pub total_rounds: Option<u32>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(bound = "AppSpecificRoundSummaryData: Serialize + for<'de2> Deserialize<'de2>")]
pub struct RoundEndedNoticePayload<AppSpecificRoundSummaryData: Clone + Debug> {
pub round_number: u32,
pub reason: String,
pub summary_data: Option<AppSpecificRoundSummaryData>,
}