Skip to main content

nil_core/market/
vault.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use crate::error::{Error, Result};
5use crate::resources::Resources;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Deserialize, Serialize)]
9#[derive_const(Clone, Default, PartialEq, Eq)]
10#[serde(rename_all = "camelCase")]
11#[cfg_attr(feature = "typescript", derive(ts_rs::TS))]
12pub struct MarketVault {
13  pub(crate) resources: Resources,
14}
15
16impl MarketVault {
17  #[inline]
18  pub fn resources(&self) -> Resources {
19    self.resources
20  }
21
22  pub(crate) fn withdraw(&mut self, resources: Resources) -> Result<()> {
23    self.resources = self
24      .resources
25      .checked_sub(resources)
26      .ok_or(Error::NotEnoughResourcesInMarketVault)?;
27
28    Ok(())
29  }
30}