Skip to main content

objectiveai_sdk/functions/inventions/state/
alpha_vector_state.rs

1use crate::functions;
2use serde::{Deserialize, Serialize};
3use schemars::JsonSchema;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
6#[schemars(rename = "functions.inventions.state.AlphaVectorState")]
7pub struct AlphaVectorState {
8    #[serde(flatten)]
9    pub params: super::Params,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    #[schemars(extend("omitempty" = true))]
12    pub input_schema:
13        Option<functions::alpha_vector::expression::VectorFunctionInputSchema>,
14}
15
16impl AlphaVectorState {
17    pub(super) fn serialize_into_files(&self) -> super::files::Files {
18        super::files::Files {
19            parameters_json: serde_json::to_string_pretty(&self.params).unwrap_or_default(),
20            function_json: None,
21            input_schema_json: self.input_schema.as_ref().map(|s|
22                serde_json::to_string_pretty(&super::InputSchema::Vector { schema: s.clone() }).unwrap_or_default()
23            ),
24            essay_md: None,
25            essay_tasks_md: None,
26            readme_md: None,
27        }
28    }
29
30    pub(super) fn deserialize_from_files(
31        input_schema: Option<functions::alpha_vector::expression::VectorFunctionInputSchema>,
32        files: &super::files::Files,
33    ) -> Result<Self, super::error::Error> {
34        let params: super::Params = {
35            let mut de = serde_json::Deserializer::from_str(&files.parameters_json);
36            serde_path_to_error::deserialize(&mut de)
37                .map_err(|e| super::error::Error::Deserialize {
38                    file: super::files::Files::PARAMETERS_JSON,
39                    source: e,
40                })?
41        };
42        Ok(Self { params, input_schema })
43    }
44}