objectiveai_cli/command/swarms/
publish.rs1use objectiveai_sdk::cli::command::swarms::publish::{
7 Request, RequestBody, RequestPublishMessage, Response,
8};
9use objectiveai_sdk::swarm::RemoteSwarmBase;
10
11use crate::context::Context;
12use crate::error::Error;
13
14pub async fn execute(ctx: &Context, request: Request) -> Result<Response, Error> {
15 let Request {
16 repository,
17 body,
18 message,
19 overwrite,
20 ..
21 } = request;
22
23 let swarm: RemoteSwarmBase = resolve_body(ctx, body).await?;
24 let msg = resolve_message(message)?;
25 let sha = crate::filesystem::publish::publish_swarm(
26 &ctx.filesystem,
27 &repository,
28 &swarm,
29 &msg,
30 overwrite,
31 )
32 .await?;
33 Ok(Response { sha })
34}
35
36async fn resolve_body(ctx: &Context, body: RequestBody) -> Result<RemoteSwarmBase, Error> {
37 match body {
38 RequestBody::Inline(swarm) => Ok(swarm),
39 RequestBody::File(path) => {
40 let contents = std::fs::read_to_string(&path)
41 .map_err(|e| Error::PromptFileRead(path, e))?;
42 let mut de = serde_json::Deserializer::from_str(&contents);
43 serde_path_to_error::deserialize(&mut de).map_err(Error::InlineDeserialize)
44 }
45 RequestBody::PythonInline(code) => ctx.python().await?.exec_code(ctx, &code, None::<()>).await?.ok_or(Error::PythonNoOutput),
46 RequestBody::PythonFile(path) => ctx.python().await?.exec_file(ctx, &path, None::<()>).await?.ok_or(Error::PythonNoOutput),
47 }
48}
49
50fn resolve_message(message: RequestPublishMessage) -> Result<String, Error> {
51 match message {
52 RequestPublishMessage::Inline(s) => Ok(s),
53 RequestPublishMessage::File(path) => std::fs::read_to_string(&path)
54 .map_err(|e| Error::PromptFileRead(path, e)),
55 }
56}
57
58pub mod request_schema {
59 use objectiveai_sdk::cli::command::swarms::publish as sdk;
60 use objectiveai_sdk::cli::command::swarms::publish::request_schema::{Request, Response};
61
62 use crate::context::Context;
63 use crate::error::Error;
64
65 pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
66 Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
67 }
68}
69
70pub mod response_schema {
71 use objectiveai_sdk::cli::command::swarms::publish as sdk;
72 use objectiveai_sdk::cli::command::swarms::publish::response_schema::{Request, Response};
73
74 use crate::context::Context;
75 use crate::error::Error;
76
77 pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
78 Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Response)))
79 }
80}