Skip to main content

objectiveai_sdk/filesystem/config/
swarms.rs

1use serde::{Serialize, Deserialize};
2
3#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
4#[schemars(rename = "filesystem.config.SwarmsConfig")]
5pub struct SwarmsConfig {
6    #[serde(skip_serializing_if = "crate::util::vec_is_none_or_empty")]
7    #[schemars(extend("omitempty" = true))]
8    pub favorites: Option<Vec<super::Favorite>>,
9}
10
11impl SwarmsConfig {
12    pub fn is_empty(&self) -> bool {
13        crate::util::vec_is_none_or_empty(&self.favorites)
14    }
15
16    pub fn is_none(this: &Option<Self>) -> bool {
17        this.as_ref().is_none_or(|cfg| cfg.is_empty())
18    }
19
20    pub fn get_favorites(&self) -> &[super::Favorite] {
21        self.favorites.as_deref().unwrap_or(&[])
22    }
23
24    pub fn add_favorite(&mut self, favorite: super::Favorite) {
25        self.favorites.get_or_insert_with(Vec::new).push(favorite);
26    }
27
28    pub fn del_favorite(&mut self, name: &str) -> Result<(), super::super::Error> {
29        let favorites = self.favorites.as_mut().ok_or_else(|| super::super::Error::FavoriteNotFound(name.to_string()))?;
30        let pos = favorites.iter().position(|f| f.get_name() == name)
31            .ok_or_else(|| super::super::Error::FavoriteNotFound(name.to_string()))?;
32        favorites.remove(pos);
33        Ok(())
34    }
35
36    pub fn edit_favorite(&mut self, name: &str) -> Result<&mut super::Favorite, super::super::Error> {
37        let favorites = self.favorites.as_mut().ok_or_else(|| super::super::Error::FavoriteNotFound(name.to_string()))?;
38        favorites.iter_mut().find(|f| f.get_name() == name)
39            .ok_or_else(|| super::super::Error::FavoriteNotFound(name.to_string()))
40    }
41
42    pub fn jq(&self, filter: &str) -> Result<Vec<serde_json::Value>, super::super::Error> {
43        super::super::run_jq(self, filter)
44    }
45}