Skip to main content

objectiveai_sdk/cli/command/config/swarms/
mod.rs

1pub mod favorites;
2pub mod get;
3
4#[derive(clap::Subcommand)]
5pub enum Command {
6    Get(get::Command),
7    Favorites {
8        #[command(subcommand)]
9        command: favorites::Command,
10    },
11}
12
13#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
14#[serde(untagged)]
15#[schemars(rename = "cli.command.config.swarms.Request")]
16pub enum Request {
17    #[schemars(title = "Get")]
18    Get(get::Request),
19    #[schemars(title = "GetRequestSchema")]
20    GetRequestSchema(get::request_schema::Request),
21    #[schemars(title = "GetResponseSchema")]
22    GetResponseSchema(get::response_schema::Request),
23    #[schemars(title = "Favorites")]
24    Favorites(favorites::Request),
25}
26
27// Exempt from json-schema coverage: tier aggregate (see the root
28// `ResponseItem` in command.rs - TS7056).
29#[objectiveai_sdk_macros::json_schema_ignore]
30#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
31#[schemars(rename = "cli.command.config.swarms.ResponseItem")]
32#[serde(untagged)]
33pub enum ResponseItem {
34    #[schemars(title = "Get")]
35    Get(get::Response),
36    #[schemars(title = "GetRequestSchema")]
37    GetRequestSchema(get::request_schema::Response),
38    #[schemars(title = "GetResponseSchema")]
39    GetResponseSchema(get::response_schema::Response),
40    #[schemars(title = "Favorites")]
41    Favorites(favorites::ResponseItem),
42}
43
44#[cfg(feature = "mcp")]
45impl crate::cli::command::CommandResponse for ResponseItem {
46    fn into_mcp(self) -> crate::cli::command::McpResponseItem {
47        match self {
48            ResponseItem::Get(v) => v.into_mcp(),
49            ResponseItem::GetRequestSchema(v) => v.into_mcp(),
50            ResponseItem::GetResponseSchema(v) => v.into_mcp(),
51            ResponseItem::Favorites(v) => v.into_mcp(),
52        }
53    }
54}
55
56impl TryFrom<Command> for Request {
57    type Error = crate::cli::command::FromArgsError;
58    fn try_from(command: Command) -> Result<Self, Self::Error> {
59        match command {
60            Command::Get(cmd) => match cmd.schema {
61                None => Ok(Request::Get(get::Request::try_from(cmd.args)?)),
62                Some(get::Schema::RequestSchema(args)) =>
63                    Ok(Request::GetRequestSchema(get::request_schema::Request::try_from(args)?)),
64                Some(get::Schema::ResponseSchema(args)) =>
65                    Ok(Request::GetResponseSchema(get::response_schema::Request::try_from(args)?)),
66            },
67            Command::Favorites { command } =>
68                Ok(Request::Favorites(favorites::Request::try_from(command)?)),
69        }
70    }
71}
72
73impl crate::cli::command::CommandRequest for Request {
74    fn into_command(&self) -> Vec<String> {
75        match self {
76            Request::Get(inner) => inner.into_command(),
77            Request::GetRequestSchema(inner) => inner.into_command(),
78            Request::GetResponseSchema(inner) => inner.into_command(),
79            Request::Favorites(inner) => inner.into_command(),
80        }
81    }
82}
83
84#[cfg(feature = "cli-executor")]
85pub async fn execute<E: crate::cli::command::CommandExecutor>(
86    executor: &E,
87    request: Request,
88
89        agent_arguments: Option<&crate::cli::command::AgentArguments>,
90    ) -> Result<
91    std::pin::Pin<Box<dyn futures::Stream<Item = Result<ResponseItem, E::Error>> + Send>>,
92    E::Error,
93> {
94    use futures::StreamExt;
95    let stream: std::pin::Pin<Box<dyn futures::Stream<Item = Result<ResponseItem, E::Error>> + Send>> =
96        match request {
97            Request::Get(req) => {
98                let value = get::execute(executor, req, agent_arguments).await?;
99                Box::pin(crate::cli::command::StreamOnce::new(Ok(
100                    ResponseItem::Get(value),
101                )))
102            }
103            Request::GetRequestSchema(req) => {
104                let value = get::request_schema::execute(executor, req, agent_arguments).await?;
105                Box::pin(crate::cli::command::StreamOnce::new(Ok(
106                    ResponseItem::GetRequestSchema(value),
107                )))
108            }
109            Request::GetResponseSchema(req) => {
110                let value = get::response_schema::execute(executor, req, agent_arguments).await?;
111                Box::pin(crate::cli::command::StreamOnce::new(Ok(
112                    ResponseItem::GetResponseSchema(value),
113                )))
114            }
115            Request::Favorites(req) => {
116                let inner = favorites::execute(executor, req, agent_arguments).await?;
117                Box::pin(inner.map(|r| r.map(ResponseItem::Favorites)))
118            }
119        };
120    Ok(stream)
121}
122
123#[cfg(feature = "cli-executor")]
124pub async fn execute_jq<E: crate::cli::command::CommandExecutor>(
125    executor: &E,
126    request: Request,
127    jq: String,
128
129        agent_arguments: Option<&crate::cli::command::AgentArguments>,
130    ) -> Result<
131    std::pin::Pin<Box<dyn futures::Stream<Item = Result<serde_json::Value, E::Error>> + Send>>,
132    E::Error,
133> {
134    let stream: std::pin::Pin<Box<dyn futures::Stream<Item = Result<serde_json::Value, E::Error>> + Send>> =
135        match request {
136            Request::Get(req) => {
137                let value = get::execute_jq(executor, req, jq, agent_arguments).await?;
138                Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
139            }
140            Request::GetRequestSchema(req) => {
141                let value = get::request_schema::execute_jq(executor, req, jq, agent_arguments).await?;
142                Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
143            }
144            Request::GetResponseSchema(req) => {
145                let value = get::response_schema::execute_jq(executor, req, jq, agent_arguments).await?;
146                Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
147            }
148            Request::Favorites(req) => {
149                let inner = favorites::execute_jq(executor, req, jq, agent_arguments).await?;
150                Box::pin(inner)
151            }
152        };
153    Ok(stream)
154}