Skip to main content

objectiveai_cli/command/plugins/
list.rs

1//! `plugins list` — bare-naked streaming handler stub.
2
3use std::pin::Pin;
4
5use futures::Stream;
6use objectiveai_sdk::cli::command::plugins::list::{Request, ResponseItem};
7
8use crate::context::Context;
9use crate::error::Error;
10
11type ItemStream = Pin<Box<dyn Stream<Item = Result<ResponseItem, Error>> + Send>>;
12
13pub async fn execute(ctx: &Context, request: Request) -> Result<ItemStream, Error> {
14    let offset = request.offset.unwrap_or(0);
15    let limit = request.limit.unwrap_or(usize::MAX);
16    let fs = ctx.filesystem.clone();
17    let stream = async_stream::stream! {
18        let manifests = fs.list_plugins(offset, limit).await;
19        for m in manifests {
20            yield Ok(ResponseItem::from(m));
21        }
22    };
23    Ok(Box::pin(stream))
24}
25
26pub mod request_schema {
27    use objectiveai_sdk::cli::command::plugins::list as sdk;
28    use objectiveai_sdk::cli::command::plugins::list::request_schema::{Request, Response};
29
30    use crate::context::Context;
31    use crate::error::Error;
32
33    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
34        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
35    }
36}
37
38pub mod response_schema {
39    use objectiveai_sdk::cli::command::plugins::list as sdk;
40    use objectiveai_sdk::cli::command::plugins::list::response_schema::{Request, Response};
41
42    use crate::context::Context;
43    use crate::error::Error;
44
45    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
46        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::ResponseItem)))
47    }
48}