spring_ai_rs/ai_interface/callback/unit_def/
resource.rs

1use std::error::Error;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{ai_interface::callback::resource::Resource, get_callback};
6
7#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
8pub struct UnitResource {
9    pub ai_id: i32,
10    pub def_id: i32,
11    pub resource: Resource,
12}
13
14#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
15pub struct UnitResourceAll {
16    pub generated: f32,
17    pub active_generated: f32,
18    pub extracts: f32,
19    pub extractor_range: f32,
20    pub wind_resource_generator: f32,
21    pub tidal_resource_generator: f32,
22    pub storage: f32,
23}
24
25impl UnitResource {
26    pub fn generated(&self) -> Result<f32, Box<dyn Error>> {
27        let get_resource_make_func = get_callback!(self.ai_id, UnitDef_getResourceMake)?;
28        Ok(unsafe { get_resource_make_func(self.ai_id, self.def_id, self.resource.resource_id) })
29    }
30
31    pub fn active_generated(&self) -> Result<f32, Box<dyn Error>> {
32        let get_makes_resource_func = get_callback!(self.ai_id, UnitDef_getMakesResource)?;
33        Ok(unsafe { get_makes_resource_func(self.ai_id, self.def_id, self.resource.resource_id) })
34    }
35
36    pub fn extracts(&self) -> Result<f32, Box<dyn Error>> {
37        let get_extracts_func = get_callback!(self.ai_id, UnitDef_getExtractsResource)?;
38        Ok(unsafe { get_extracts_func(self.ai_id, self.def_id, self.resource.resource_id) })
39    }
40
41    pub fn extractor_range(&self) -> Result<f32, Box<dyn Error>> {
42        let get_resource_extractor_range_func =
43            get_callback!(self.ai_id, UnitDef_getResourceExtractorRange)?;
44        Ok(unsafe {
45            get_resource_extractor_range_func(self.ai_id, self.def_id, self.resource.resource_id)
46        })
47    }
48
49    pub fn wind_resource_generator(&self) -> Result<f32, Box<dyn Error>> {
50        let get_wind_resource_generator_func =
51            get_callback!(self.ai_id, UnitDef_getWindResourceGenerator)?;
52        Ok(unsafe {
53            get_wind_resource_generator_func(self.ai_id, self.def_id, self.resource.resource_id)
54        })
55    }
56
57    pub fn tidal_resource_generator(&self) -> Result<f32, Box<dyn Error>> {
58        let get_tidal_resource_generator_func =
59            get_callback!(self.ai_id, UnitDef_getTidalResourceGenerator)?;
60        Ok(unsafe {
61            get_tidal_resource_generator_func(self.ai_id, self.def_id, self.resource.resource_id)
62        })
63    }
64
65    pub fn storage(&self) -> Result<f32, Box<dyn Error>> {
66        let get_storage_func = get_callback!(self.ai_id, UnitDef_getStorage)?;
67        Ok(unsafe { get_storage_func(self.ai_id, self.def_id, self.resource.resource_id) })
68    }
69
70    pub fn all(&self) -> Result<UnitResourceAll, Box<dyn Error>> {
71        Ok(UnitResourceAll {
72            generated: self.generated()?,
73            active_generated: self.active_generated()?,
74            extracts: self.extracts()?,
75            extractor_range: self.extractor_range()?,
76            wind_resource_generator: self.wind_resource_generator()?,
77            tidal_resource_generator: self.tidal_resource_generator()?,
78            storage: self.storage()?,
79        })
80    }
81}