objectiveai_cli/command/functions/
publish.rs1use objectiveai_sdk::cli::command::functions::publish::{
5 Request, RequestBody, RequestPublishMessage, Response,
6};
7use objectiveai_sdk::functions::FullRemoteFunction;
8
9use crate::context::Context;
10use crate::error::Error;
11
12pub async fn execute(ctx: &Context, request: Request) -> Result<Response, Error> {
13 let body = resolve_body(ctx, request.body).await?;
14 let message = resolve_publish_message(request.message)?;
15 let sha = crate::filesystem::publish::publish_function(
16 &ctx.filesystem,
17 &request.repository,
18 &body,
19 &message,
20 request.overwrite,
21 )
22 .await?;
23 Ok(Response { sha })
24}
25
26async fn resolve_body(ctx: &Context, body: RequestBody) -> Result<FullRemoteFunction, Error> {
27 match body {
28 RequestBody::Inline(v) => Ok(v),
29 RequestBody::File(p) => crate::source_resolver::resolve_source(
30 ctx, None, None, Some(p), None, None,
31 |_| unreachable!(),
32 ).await,
33 RequestBody::PythonInline(s) => crate::source_resolver::resolve_source(
34 ctx, None, None, None, Some(s), None,
35 |_| unreachable!(),
36 ).await,
37 RequestBody::PythonFile(p) => crate::source_resolver::resolve_source(
38 ctx, None, None, None, None, Some(p),
39 |_| unreachable!(),
40 ).await,
41 }
42}
43
44fn resolve_publish_message(m: RequestPublishMessage) -> Result<String, Error> {
45 match m {
46 RequestPublishMessage::Inline(s) => Ok(s),
47 RequestPublishMessage::File(p) => std::fs::read_to_string(&p)
48 .map_err(|e| Error::PromptFileRead(p, e)),
49 }
50}
51
52pub mod request_schema {
53 use objectiveai_sdk::cli::command::functions::publish as sdk;
54 use objectiveai_sdk::cli::command::functions::publish::request_schema::{Request, Response};
55
56 use crate::context::Context;
57 use crate::error::Error;
58
59 pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
60 Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
61 }
62}
63
64pub mod response_schema {
65 use objectiveai_sdk::cli::command::functions::publish as sdk;
66 use objectiveai_sdk::cli::command::functions::publish::response_schema::{Request, Response};
67
68 use crate::context::Context;
69 use crate::error::Error;
70
71 pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
72 Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Response)))
73 }
74}