spring_ai_rs/ai_interface/callback/unit_def/
resource.rs1use 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}