vv-agent 0.4.7

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
pub mod channel;
pub mod stdio;

use std::future::Future;
use std::pin::Pin;

use serde::{Deserialize, Serialize};

use crate::app_server::protocol::{AppServerError, JsonRpcMessage};

pub type TransportFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub struct ConnectionId(u64);

impl ConnectionId {
    pub fn new(value: u64) -> Self {
        Self(value)
    }

    pub fn as_u64(self) -> u64 {
        self.0
    }
}

#[derive(Debug, Clone, PartialEq)]
pub enum TransportEvent {
    Opened {
        connection_id: ConnectionId,
    },
    Message {
        connection_id: ConnectionId,
        message: JsonRpcMessage,
    },
    Closed {
        connection_id: ConnectionId,
    },
}

pub trait AppServerTransport {
    fn next_event(&mut self)
        -> TransportFuture<'_, Option<Result<TransportEvent, AppServerError>>>;

    fn send(
        &self,
        connection_id: ConnectionId,
        message: JsonRpcMessage,
    ) -> TransportFuture<'_, Result<(), AppServerError>>;
}