Skip to main content

objectiveai_cli/command/functions/
publish.rs

1//! `functions publish` — write a `FullRemoteFunction` to a repository
2//! on the filesystem and return its content sha.
3
4use 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}