spring_ai_rs/ai_interface/callback/
resource.rs1use std::{error::Error, ffi::CStr};
2
3use serde::{Deserialize, Serialize};
4
5use crate::{ai_interface::AIInterface, get_callback};
6
7#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
8pub struct Resource {
9 pub ai_id: i32,
10 pub resource_id: i32,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct ResourceInterface {
15 pub ai_id: i32,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct ResourceAll {
20 name: String,
21 optimum: f32,
22 current: f32,
23 income: f32,
24 usage: f32,
25 storage: f32,
26 pull: f32,
27 share: f32,
28 sent: f32,
29 received: f32,
30 excess: f32,
31}
32
33impl AIInterface {
34 pub fn resource_interface(&self) -> ResourceInterface {
35 ResourceInterface { ai_id: self.ai_id }
36 }
37}
38
39impl ResourceInterface {
40 pub fn get_resources(&self) -> Result<Vec<Resource>, Box<dyn Error>> {
41 let get_resources = get_callback!(self.ai_id, getResources)?;
42
43 Ok((0..unsafe { get_resources(self.ai_id) })
44 .map(|i| Resource {
45 ai_id: self.ai_id,
46 resource_id: i,
47 })
48 .collect())
49 }
50}
51
52impl Resource {
53 pub fn name(&self) -> Result<String, Box<dyn Error>> {
54 let get_resource_name = get_callback!(self.ai_id, Resource_getName)?;
55
56 Ok(String::from(
57 unsafe { CStr::from_ptr(get_resource_name(self.ai_id, self.resource_id)) }.to_str()?,
58 ))
59 }
60
61 pub fn optimum(&self) -> Result<f32, Box<dyn Error>> {
62 let get_resource_optimum = get_callback!(self.ai_id, Resource_getOptimum)?;
63 Ok(unsafe { get_resource_optimum(self.ai_id, self.resource_id) })
64 }
65
66 pub fn current(&self) -> Result<f32, Box<dyn Error>> {
67 let get_economy_current = get_callback!(self.ai_id, Economy_getCurrent)?;
68 Ok(unsafe { get_economy_current(self.ai_id, self.resource_id) })
69 }
70
71 pub fn income(&self) -> Result<f32, Box<dyn Error>> {
72 let get_economy_income = get_callback!(self.ai_id, Economy_getIncome)?;
73 Ok(unsafe { get_economy_income(self.ai_id, self.resource_id) })
74 }
75
76 pub fn usage(&self) -> Result<f32, Box<dyn Error>> {
77 let get_economy_usage = get_callback!(self.ai_id, Economy_getUsage)?;
78 Ok(unsafe { get_economy_usage(self.ai_id, self.resource_id) })
79 }
80
81 pub fn storage(&self) -> Result<f32, Box<dyn Error>> {
82 let get_economy_storage = get_callback!(self.ai_id, Economy_getStorage)?;
83 Ok(unsafe { get_economy_storage(self.ai_id, self.resource_id) })
84 }
85
86 pub fn pull(&self) -> Result<f32, Box<dyn Error>> {
87 let get_economy_pull = get_callback!(self.ai_id, Economy_getPull)?;
88 Ok(unsafe { get_economy_pull(self.ai_id, self.resource_id) })
89 }
90
91 pub fn share(&self) -> Result<f32, Box<dyn Error>> {
92 let get_economy_share = get_callback!(self.ai_id, Economy_getShare)?;
93 Ok(unsafe { get_economy_share(self.ai_id, self.resource_id) })
94 }
95
96 pub fn sent(&self) -> Result<f32, Box<dyn Error>> {
97 let get_economy_sent = get_callback!(self.ai_id, Economy_getSent)?;
98 Ok(unsafe { get_economy_sent(self.ai_id, self.resource_id) })
99 }
100
101 pub fn received(&self) -> Result<f32, Box<dyn Error>> {
102 let get_economy_received = get_callback!(self.ai_id, Economy_getReceived)?;
103 Ok(unsafe { get_economy_received(self.ai_id, self.resource_id) })
104 }
105
106 pub fn excess(&self) -> Result<f32, Box<dyn Error>> {
107 let get_economy_excess = get_callback!(self.ai_id, Economy_getExcess)?;
108 Ok(unsafe { get_economy_excess(self.ai_id, self.resource_id) })
109 }
110
111 pub fn all(&self) -> Result<ResourceAll, Box<dyn Error>> {
112 Ok(ResourceAll {
113 name: self.name()?,
114 optimum: self.optimum()?,
115 current: self.current()?,
116 income: self.income()?,
117 usage: self.usage()?,
118 storage: self.storage()?,
119 pull: self.pull()?,
120 share: self.share()?,
121 sent: self.sent()?,
122 received: self.received()?,
123 excess: self.excess()?,
124 })
125 }
126}