spring_ai_rs/ai_interface/callback/group/
order_preview.rs1use std::{error::Error, f32::NAN};
2
3use crate::get_callback;
4
5#[derive(Debug, Copy, Clone)]
6pub struct GroupOrderPreview {
7 pub ai_id: i32,
8 pub group_id: i32,
9 pub group_order_preview_id: i32,
10}
11
12#[derive(Debug, Clone)]
13pub struct GroupOrderPreviewAll {
14 options: i16,
15 tag: i32,
16 timeout: i32,
17 parameters: Vec<f32>,
18}
19
20const MAX_PARAMETERS: usize = 32;
21
22impl GroupOrderPreview {
23 pub fn options(&self) -> Result<i16, Box<dyn Error>> {
24 let get_options_func = get_callback!(self.ai_id, Group_OrderPreview_getOptions)?;
25
26 Ok(unsafe { get_options_func(self.ai_id, self.group_id) })
27 }
28
29 pub fn tag(&self) -> Result<i32, Box<dyn Error>> {
30 let get_tag_func = get_callback!(self.ai_id, Group_OrderPreview_getTag)?;
31
32 Ok(unsafe { get_tag_func(self.ai_id, self.group_id) })
33 }
34
35 pub fn timeout(&self) -> Result<i32, Box<dyn Error>> {
36 let get_timeout_func = get_callback!(self.ai_id, Group_OrderPreview_getTimeOut)?;
37
38 Ok(unsafe { get_timeout_func(self.ai_id, self.group_id) })
39 }
40
41 pub fn parameters(&self) -> Result<Vec<f32>, Box<dyn Error>> {
42 let get_order_preview_parameters_func =
43 get_callback!(self.ai_id, Group_OrderPreview_getParams)?;
44
45 let mut f = [NAN; MAX_PARAMETERS];
46 unsafe {
47 get_order_preview_parameters_func(
48 self.ai_id,
49 self.group_id,
50 f.as_mut_ptr(),
51 MAX_PARAMETERS as i32,
52 )
53 };
54
55 Ok(f.iter().cloned().filter(|&f_i| f_i != NAN).collect())
56 }
57
58 pub fn all(&self) -> Result<GroupOrderPreviewAll, Box<dyn Error>> {
59 Ok(GroupOrderPreviewAll {
60 options: self.options()?,
61 tag: self.tag()?,
62 timeout: self.timeout()?,
63 parameters: self.parameters()?,
64 })
65 }
66}