Skip to main content

tycho_collator/validator/rpc/
client.rs

1use std::sync::Arc;
2
3use anyhow::Result;
4use tycho_network::{Network, PeerId, PrefixedRequest, PrivateOverlay, Response};
5
6#[derive(Clone)]
7#[repr(transparent)]
8pub struct ValidatorClient {
9    inner: Arc<Inner>,
10}
11
12impl ValidatorClient {
13    pub fn new(network: Network, overlay: PrivateOverlay) -> Self {
14        Self {
15            inner: Arc::new(Inner { network, overlay }),
16        }
17    }
18
19    pub fn network(&self) -> &Network {
20        &self.inner.network
21    }
22
23    pub fn overlay(&self) -> &PrivateOverlay {
24        &self.inner.overlay
25    }
26
27    pub fn peer_id(&self) -> &PeerId {
28        self.inner.network.peer_id()
29    }
30
31    pub fn request_from_tl<T>(&self, body: T) -> PrefixedRequest
32    where
33        T: tl_proto::TlWrite<Repr = tl_proto::Boxed>,
34    {
35        self.inner.overlay.request_from_tl(body)
36    }
37
38    pub async fn query(&self, peer_id: &PeerId, req: PrefixedRequest) -> Result<Response> {
39        self.inner
40            .overlay
41            .query(&self.inner.network, peer_id, req)
42            .await
43    }
44}
45
46struct Inner {
47    network: Network,
48    overlay: PrivateOverlay,
49}