1use 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}