Skip to main content

nil_core/report/
battle.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use crate::battle::BattleResult;
5use crate::continent::Coord;
6use crate::report::ReportId;
7use crate::resources::Resources;
8use crate::round::RoundId;
9use crate::ruler::Ruler;
10use bon::Builder;
11use jiff::Zoned;
12use nil_core_macros::Report;
13use serde::{Deserialize, Serialize};
14
15#[derive(Report, Builder, Clone, Debug, Deserialize, Serialize)]
16#[serde(rename_all = "camelCase")]
17pub struct BattleReport {
18  #[builder(skip = ReportId::new())]
19  id: ReportId,
20  attacker: Ruler,
21  defender: Ruler,
22  origin: Coord,
23  destination: Coord,
24  result: BattleResult,
25  hauled_resources: Resources,
26  round: RoundId,
27  #[builder(skip = Zoned::now())]
28  time: Zoned,
29}
30
31impl BattleReport {
32  #[inline]
33  pub fn attacker(&self) -> &Ruler {
34    &self.attacker
35  }
36
37  #[inline]
38  pub fn defender(&self) -> &Ruler {
39    &self.defender
40  }
41
42  #[inline]
43  pub fn result(&self) -> &BattleResult {
44    &self.result
45  }
46
47  #[inline]
48  pub fn origin(&self) -> Coord {
49    self.origin
50  }
51
52  #[inline]
53  pub fn destination(&self) -> Coord {
54    self.destination
55  }
56
57  #[inline]
58  pub fn hauled_resources(&self) -> &Resources {
59    &self.hauled_resources
60  }
61}