use std::collections::BTreeSet;
use iroh::NodeId;
use nested_enum_utils::enum_conversions;
use quic_rpc_derive::rpc_requests;
use serde::{Deserialize, Serialize};
pub use crate::net::{Command as SubscribeUpdate, Event as SubscribeResponse};
use crate::proto::TopicId;
#[derive(Debug, Clone)]
pub struct RpcService;
impl quic_rpc::Service for RpcService {
type Req = Request;
type Res = Response;
}
type RpcResult<T> = std::result::Result<T, serde_error::Error>;
#[allow(missing_docs)]
#[derive(strum::Display, Debug, Serialize, Deserialize)]
#[enum_conversions]
#[rpc_requests(RpcService)]
pub enum Request {
#[bidi_streaming(update = SubscribeUpdate, response = RpcResult<SubscribeResponse>)]
Subscribe(SubscribeRequest),
Update(SubscribeUpdate),
}
#[allow(missing_docs)]
#[derive(strum::Display, Debug, Serialize, Deserialize)]
#[enum_conversions]
pub enum Response {
Subscribe(RpcResult<SubscribeResponse>),
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SubscribeRequest {
pub topic: TopicId,
pub bootstrap: BTreeSet<NodeId>,
pub subscription_capacity: usize,
}