spring_ai_rs/ai_interface/callback/group/
order_preview.rs

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