Skip to main content

objectiveai_cli/command/plugins/logs/
list.rs

1//! `plugins logs list` — stream captured plugin stderr lines for one
2//! plugin coordinate (owner/name/version), ascending by the BIGSERIAL
3//! `"index"` cursor (`--after-id` / `--limit` paginate).
4
5use std::pin::Pin;
6
7use futures::Stream;
8use objectiveai_sdk::cli::command::plugins::logs::list::{Request, ResponseItem};
9
10use crate::context::Context;
11use crate::error::Error;
12
13type ItemStream = Pin<Box<dyn Stream<Item = Result<ResponseItem, Error>> + Send>>;
14
15pub async fn execute(ctx: &Context, request: Request) -> Result<ItemStream, Error> {
16    let db = ctx.db_client().await?.clone();
17    let items = crate::db::logs::read_plugin_messages(
18        &db,
19        &request.owner,
20        &request.name,
21        &request.version,
22        request.after_id,
23        request.limit,
24    )
25    .await
26    .map_err(Error::from)?;
27    let stream = async_stream::stream! {
28        for item in items {
29            yield Ok(item);
30        }
31    };
32    Ok(Box::pin(stream))
33}
34
35pub mod request_schema {
36    use objectiveai_sdk::cli::command::plugins::logs::list as sdk;
37    use objectiveai_sdk::cli::command::plugins::logs::list::request_schema::{Request, Response};
38
39    use crate::context::Context;
40    use crate::error::Error;
41
42    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
43        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
44    }
45}
46
47pub mod response_schema {
48    use objectiveai_sdk::cli::command::plugins::logs::list as sdk;
49    use objectiveai_sdk::cli::command::plugins::logs::list::response_schema::{Request, Response};
50
51    use crate::context::Context;
52    use crate::error::Error;
53
54    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
55        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::ResponseItem)))
56    }
57}