#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Envelope {
#[prost(bytes = "vec", tag = "1")]
pub payload: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "2")]
pub signature: ::prost::alloc::vec::Vec<u8>,
#[prost(message, optional, tag = "3")]
pub secret_envelope: ::core::option::Option<SecretEnvelope>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SecretEnvelope {
#[prost(bytes = "vec", tag = "1")]
pub payload: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "2")]
pub signature: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Secret {
#[prost(oneof = "secret::Content", tags = "1")]
pub content: ::core::option::Option<secret::Content>,
}
pub mod secret {
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
pub enum Content {
#[prost(string, tag = "1")]
InternalEndpoint(::prost::alloc::string::String),
}
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GossipMessage {
#[prost(uint64, tag = "1")]
pub nonce: u64,
#[prost(bytes = "vec", tag = "2")]
pub channel: ::prost::alloc::vec::Vec<u8>,
#[prost(enumeration = "gossip_message::Tag", tag = "3")]
pub tag: i32,
#[prost(
oneof = "gossip_message::Content",
tags = "5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25"
)]
pub content: ::core::option::Option<gossip_message::Content>,
}
pub mod gossip_message {
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
::prost::Enumeration
)]
#[repr(i32)]
pub enum Tag {
Undefined = 0,
Empty = 1,
OrgOnly = 2,
ChanOnly = 3,
ChanAndOrg = 4,
ChanOrOrg = 5,
}
impl Tag {
pub fn as_str_name(&self) -> &'static str {
match self {
Self::Undefined => "UNDEFINED",
Self::Empty => "EMPTY",
Self::OrgOnly => "ORG_ONLY",
Self::ChanOnly => "CHAN_ONLY",
Self::ChanAndOrg => "CHAN_AND_ORG",
Self::ChanOrOrg => "CHAN_OR_ORG",
}
}
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"UNDEFINED" => Some(Self::Undefined),
"EMPTY" => Some(Self::Empty),
"ORG_ONLY" => Some(Self::OrgOnly),
"CHAN_ONLY" => Some(Self::ChanOnly),
"CHAN_AND_ORG" => Some(Self::ChanAndOrg),
"CHAN_OR_ORG" => Some(Self::ChanOrOrg),
_ => None,
}
}
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum Content {
#[prost(message, tag = "5")]
AliveMsg(super::AliveMessage),
#[prost(message, tag = "6")]
MemReq(super::MembershipRequest),
#[prost(message, tag = "7")]
MemRes(super::MembershipResponse),
#[prost(message, tag = "8")]
DataMsg(super::DataMessage),
#[prost(message, tag = "9")]
Hello(super::GossipHello),
#[prost(message, tag = "10")]
DataDig(super::DataDigest),
#[prost(message, tag = "11")]
DataReq(super::DataRequest),
#[prost(message, tag = "12")]
DataUpdate(super::DataUpdate),
#[prost(message, tag = "13")]
Empty(super::Empty),
#[prost(message, tag = "14")]
Conn(super::ConnEstablish),
#[prost(message, tag = "15")]
StateInfo(super::StateInfo),
#[prost(message, tag = "16")]
StateSnapshot(super::StateInfoSnapshot),
#[prost(message, tag = "17")]
StateInfoPullReq(super::StateInfoPullRequest),
#[prost(message, tag = "18")]
StateRequest(super::RemoteStateRequest),
#[prost(message, tag = "19")]
StateResponse(super::RemoteStateResponse),
#[prost(message, tag = "20")]
LeadershipMsg(super::LeadershipMessage),
#[prost(message, tag = "21")]
PeerIdentity(super::PeerIdentity),
#[prost(message, tag = "22")]
Ack(super::Acknowledgement),
#[prost(message, tag = "23")]
PrivateReq(super::RemotePvtDataRequest),
#[prost(message, tag = "24")]
PrivateRes(super::RemotePvtDataResponse),
#[prost(message, tag = "25")]
PrivateData(super::PrivateDataMessage),
}
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StateInfo {
#[prost(message, optional, tag = "2")]
pub timestamp: ::core::option::Option<PeerTime>,
#[prost(bytes = "vec", tag = "3")]
pub pki_id: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "4")]
pub channel_mac: ::prost::alloc::vec::Vec<u8>,
#[prost(message, optional, tag = "5")]
pub properties: ::core::option::Option<Properties>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Properties {
#[prost(uint64, tag = "1")]
pub ledger_height: u64,
#[prost(bool, tag = "2")]
pub left_channel: bool,
#[prost(message, repeated, tag = "3")]
pub chaincodes: ::prost::alloc::vec::Vec<Chaincode>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StateInfoSnapshot {
#[prost(message, repeated, tag = "1")]
pub elements: ::prost::alloc::vec::Vec<Envelope>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StateInfoPullRequest {
#[prost(bytes = "vec", tag = "1")]
pub channel_mac: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ConnEstablish {
#[prost(bytes = "vec", tag = "1")]
pub pki_id: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "2")]
pub identity: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "3")]
pub tls_cert_hash: ::prost::alloc::vec::Vec<u8>,
#[prost(bool, tag = "4")]
pub probe: bool,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerIdentity {
#[prost(bytes = "vec", tag = "1")]
pub pki_id: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "2")]
pub cert: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "3")]
pub metadata: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DataRequest {
#[prost(uint64, tag = "1")]
pub nonce: u64,
#[prost(bytes = "vec", repeated, tag = "2")]
pub digests: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
#[prost(enumeration = "PullMsgType", tag = "3")]
pub msg_type: i32,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GossipHello {
#[prost(uint64, tag = "1")]
pub nonce: u64,
#[prost(bytes = "vec", tag = "2")]
pub metadata: ::prost::alloc::vec::Vec<u8>,
#[prost(enumeration = "PullMsgType", tag = "3")]
pub msg_type: i32,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DataUpdate {
#[prost(uint64, tag = "1")]
pub nonce: u64,
#[prost(message, repeated, tag = "2")]
pub data: ::prost::alloc::vec::Vec<Envelope>,
#[prost(enumeration = "PullMsgType", tag = "3")]
pub msg_type: i32,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DataDigest {
#[prost(uint64, tag = "1")]
pub nonce: u64,
#[prost(bytes = "vec", repeated, tag = "2")]
pub digests: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
#[prost(enumeration = "PullMsgType", tag = "3")]
pub msg_type: i32,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DataMessage {
#[prost(message, optional, tag = "1")]
pub payload: ::core::option::Option<Payload>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PrivateDataMessage {
#[prost(message, optional, tag = "1")]
pub payload: ::core::option::Option<PrivatePayload>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Payload {
#[prost(uint64, tag = "1")]
pub seq_num: u64,
#[prost(bytes = "vec", tag = "2")]
pub data: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", repeated, tag = "3")]
pub private_data: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PrivatePayload {
#[prost(string, tag = "1")]
pub collection_name: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub namespace: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub tx_id: ::prost::alloc::string::String,
#[prost(bytes = "vec", tag = "4")]
pub private_rwset: ::prost::alloc::vec::Vec<u8>,
#[prost(uint64, tag = "5")]
pub private_sim_height: u64,
#[prost(message, optional, tag = "6")]
pub collection_configs: ::core::option::Option<
super::protos::CollectionConfigPackage,
>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AliveMessage {
#[prost(message, optional, tag = "1")]
pub membership: ::core::option::Option<Member>,
#[prost(message, optional, tag = "2")]
pub timestamp: ::core::option::Option<PeerTime>,
#[prost(bytes = "vec", tag = "4")]
pub identity: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LeadershipMessage {
#[prost(bytes = "vec", tag = "1")]
pub pki_id: ::prost::alloc::vec::Vec<u8>,
#[prost(message, optional, tag = "2")]
pub timestamp: ::core::option::Option<PeerTime>,
#[prost(bool, tag = "3")]
pub is_declaration: bool,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerTime {
#[prost(uint64, tag = "1")]
pub inc_num: u64,
#[prost(uint64, tag = "2")]
pub seq_num: u64,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MembershipRequest {
#[prost(message, optional, tag = "1")]
pub self_information: ::core::option::Option<Envelope>,
#[prost(bytes = "vec", repeated, tag = "2")]
pub known: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MembershipResponse {
#[prost(message, repeated, tag = "1")]
pub alive: ::prost::alloc::vec::Vec<Envelope>,
#[prost(message, repeated, tag = "2")]
pub dead: ::prost::alloc::vec::Vec<Envelope>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Member {
#[prost(string, tag = "1")]
pub endpoint: ::prost::alloc::string::String,
#[prost(bytes = "vec", tag = "2")]
pub metadata: ::prost::alloc::vec::Vec<u8>,
#[prost(bytes = "vec", tag = "3")]
pub pki_id: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Empty {}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RemoteStateRequest {
#[prost(uint64, tag = "1")]
pub start_seq_num: u64,
#[prost(uint64, tag = "2")]
pub end_seq_num: u64,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RemoteStateResponse {
#[prost(message, repeated, tag = "1")]
pub payloads: ::prost::alloc::vec::Vec<Payload>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RemotePvtDataRequest {
#[prost(message, repeated, tag = "1")]
pub digests: ::prost::alloc::vec::Vec<PvtDataDigest>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PvtDataDigest {
#[prost(string, tag = "1")]
pub tx_id: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub namespace: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub collection: ::prost::alloc::string::String,
#[prost(uint64, tag = "4")]
pub block_seq: u64,
#[prost(uint64, tag = "5")]
pub seq_in_block: u64,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RemotePvtDataResponse {
#[prost(message, repeated, tag = "1")]
pub elements: ::prost::alloc::vec::Vec<PvtDataElement>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PvtDataElement {
#[prost(message, optional, tag = "1")]
pub digest: ::core::option::Option<PvtDataDigest>,
#[prost(bytes = "vec", repeated, tag = "2")]
pub payload: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PvtDataPayload {
#[prost(uint64, tag = "1")]
pub tx_seq_in_block: u64,
#[prost(bytes = "vec", tag = "2")]
pub payload: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Acknowledgement {
#[prost(string, tag = "1")]
pub error: ::prost::alloc::string::String,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Chaincode {
#[prost(string, tag = "1")]
pub name: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub version: ::prost::alloc::string::String,
#[prost(bytes = "vec", tag = "3")]
pub metadata: ::prost::alloc::vec::Vec<u8>,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum PullMsgType {
Undefined = 0,
BlockMsg = 1,
IdentityMsg = 2,
}
impl PullMsgType {
pub fn as_str_name(&self) -> &'static str {
match self {
Self::Undefined => "UNDEFINED",
Self::BlockMsg => "BLOCK_MSG",
Self::IdentityMsg => "IDENTITY_MSG",
}
}
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"UNDEFINED" => Some(Self::Undefined),
"BLOCK_MSG" => Some(Self::BlockMsg),
"IDENTITY_MSG" => Some(Self::IdentityMsg),
_ => None,
}
}
}
pub mod gossip_client {
#![allow(
unused_variables,
dead_code,
missing_docs,
clippy::wildcard_imports,
clippy::let_unit_value,
)]
use tonic::codegen::*;
use tonic::codegen::http::Uri;
#[derive(Debug, Clone)]
pub struct GossipClient<T> {
inner: tonic::client::Grpc<T>,
}
impl<T> GossipClient<T>
where
T: tonic::client::GrpcService<tonic::body::Body>,
T::Error: Into<StdError>,
T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
<T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
{
pub fn new(inner: T) -> Self {
let inner = tonic::client::Grpc::new(inner);
Self { inner }
}
pub fn with_origin(inner: T, origin: Uri) -> Self {
let inner = tonic::client::Grpc::with_origin(inner, origin);
Self { inner }
}
pub fn with_interceptor<F>(
inner: T,
interceptor: F,
) -> GossipClient<InterceptedService<T, F>>
where
F: tonic::service::Interceptor,
T::ResponseBody: Default,
T: tonic::codegen::Service<
http::Request<tonic::body::Body>,
Response = http::Response<
<T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
>,
>,
<T as tonic::codegen::Service<
http::Request<tonic::body::Body>,
>>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
{
GossipClient::new(InterceptedService::new(inner, interceptor))
}
#[must_use]
pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
self.inner = self.inner.send_compressed(encoding);
self
}
#[must_use]
pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
self.inner = self.inner.accept_compressed(encoding);
self
}
#[must_use]
pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
self.inner = self.inner.max_decoding_message_size(limit);
self
}
#[must_use]
pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
self.inner = self.inner.max_encoding_message_size(limit);
self
}
pub async fn gossip_stream(
&mut self,
request: impl tonic::IntoStreamingRequest<Message = super::Envelope>,
) -> std::result::Result<
tonic::Response<tonic::codec::Streaming<super::Envelope>>,
tonic::Status,
> {
self.inner
.ready()
.await
.map_err(|e| {
tonic::Status::unknown(
format!("Service was not ready: {}", e.into()),
)
})?;
let codec = tonic_prost::ProstCodec::default();
let path = http::uri::PathAndQuery::from_static(
"/gossip.Gossip/GossipStream",
);
let mut req = request.into_streaming_request();
req.extensions_mut()
.insert(GrpcMethod::new("gossip.Gossip", "GossipStream"));
self.inner.streaming(req, path, codec).await
}
pub async fn ping(
&mut self,
request: impl tonic::IntoRequest<super::Empty>,
) -> std::result::Result<tonic::Response<super::Empty>, tonic::Status> {
self.inner
.ready()
.await
.map_err(|e| {
tonic::Status::unknown(
format!("Service was not ready: {}", e.into()),
)
})?;
let codec = tonic_prost::ProstCodec::default();
let path = http::uri::PathAndQuery::from_static("/gossip.Gossip/Ping");
let mut req = request.into_request();
req.extensions_mut().insert(GrpcMethod::new("gossip.Gossip", "Ping"));
self.inner.unary(req, path, codec).await
}
}
}
pub mod gossip_server {
#![allow(
unused_variables,
dead_code,
missing_docs,
clippy::wildcard_imports,
clippy::let_unit_value,
)]
use tonic::codegen::*;
#[async_trait]
pub trait Gossip: std::marker::Send + std::marker::Sync + 'static {
type GossipStreamStream: tonic::codegen::tokio_stream::Stream<
Item = std::result::Result<super::Envelope, tonic::Status>,
>
+ std::marker::Send
+ 'static;
async fn gossip_stream(
&self,
request: tonic::Request<tonic::Streaming<super::Envelope>>,
) -> std::result::Result<
tonic::Response<Self::GossipStreamStream>,
tonic::Status,
>;
async fn ping(
&self,
request: tonic::Request<super::Empty>,
) -> std::result::Result<tonic::Response<super::Empty>, tonic::Status>;
}
#[derive(Debug)]
pub struct GossipServer<T> {
inner: Arc<T>,
accept_compression_encodings: EnabledCompressionEncodings,
send_compression_encodings: EnabledCompressionEncodings,
max_decoding_message_size: Option<usize>,
max_encoding_message_size: Option<usize>,
}
impl<T> GossipServer<T> {
pub fn new(inner: T) -> Self {
Self::from_arc(Arc::new(inner))
}
pub fn from_arc(inner: Arc<T>) -> Self {
Self {
inner,
accept_compression_encodings: Default::default(),
send_compression_encodings: Default::default(),
max_decoding_message_size: None,
max_encoding_message_size: None,
}
}
pub fn with_interceptor<F>(
inner: T,
interceptor: F,
) -> InterceptedService<Self, F>
where
F: tonic::service::Interceptor,
{
InterceptedService::new(Self::new(inner), interceptor)
}
#[must_use]
pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
self.accept_compression_encodings.enable(encoding);
self
}
#[must_use]
pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
self.send_compression_encodings.enable(encoding);
self
}
#[must_use]
pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
self.max_decoding_message_size = Some(limit);
self
}
#[must_use]
pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
self.max_encoding_message_size = Some(limit);
self
}
}
impl<T, B> tonic::codegen::Service<http::Request<B>> for GossipServer<T>
where
T: Gossip,
B: Body + std::marker::Send + 'static,
B::Error: Into<StdError> + std::marker::Send + 'static,
{
type Response = http::Response<tonic::body::Body>;
type Error = std::convert::Infallible;
type Future = BoxFuture<Self::Response, Self::Error>;
fn poll_ready(
&mut self,
_cx: &mut Context<'_>,
) -> Poll<std::result::Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}
fn call(&mut self, req: http::Request<B>) -> Self::Future {
match req.uri().path() {
"/gossip.Gossip/GossipStream" => {
#[allow(non_camel_case_types)]
struct GossipStreamSvc<T: Gossip>(pub Arc<T>);
impl<T: Gossip> tonic::server::StreamingService<super::Envelope>
for GossipStreamSvc<T> {
type Response = super::Envelope;
type ResponseStream = T::GossipStreamStream;
type Future = BoxFuture<
tonic::Response<Self::ResponseStream>,
tonic::Status,
>;
fn call(
&mut self,
request: tonic::Request<tonic::Streaming<super::Envelope>>,
) -> Self::Future {
let inner = Arc::clone(&self.0);
let fut = async move {
<T as Gossip>::gossip_stream(&inner, request).await
};
Box::pin(fut)
}
}
let accept_compression_encodings = self.accept_compression_encodings;
let send_compression_encodings = self.send_compression_encodings;
let max_decoding_message_size = self.max_decoding_message_size;
let max_encoding_message_size = self.max_encoding_message_size;
let inner = self.inner.clone();
let fut = async move {
let method = GossipStreamSvc(inner);
let codec = tonic_prost::ProstCodec::default();
let mut grpc = tonic::server::Grpc::new(codec)
.apply_compression_config(
accept_compression_encodings,
send_compression_encodings,
)
.apply_max_message_size_config(
max_decoding_message_size,
max_encoding_message_size,
);
let res = grpc.streaming(method, req).await;
Ok(res)
};
Box::pin(fut)
}
"/gossip.Gossip/Ping" => {
#[allow(non_camel_case_types)]
struct PingSvc<T: Gossip>(pub Arc<T>);
impl<T: Gossip> tonic::server::UnaryService<super::Empty>
for PingSvc<T> {
type Response = super::Empty;
type Future = BoxFuture<
tonic::Response<Self::Response>,
tonic::Status,
>;
fn call(
&mut self,
request: tonic::Request<super::Empty>,
) -> Self::Future {
let inner = Arc::clone(&self.0);
let fut = async move {
<T as Gossip>::ping(&inner, request).await
};
Box::pin(fut)
}
}
let accept_compression_encodings = self.accept_compression_encodings;
let send_compression_encodings = self.send_compression_encodings;
let max_decoding_message_size = self.max_decoding_message_size;
let max_encoding_message_size = self.max_encoding_message_size;
let inner = self.inner.clone();
let fut = async move {
let method = PingSvc(inner);
let codec = tonic_prost::ProstCodec::default();
let mut grpc = tonic::server::Grpc::new(codec)
.apply_compression_config(
accept_compression_encodings,
send_compression_encodings,
)
.apply_max_message_size_config(
max_decoding_message_size,
max_encoding_message_size,
);
let res = grpc.unary(method, req).await;
Ok(res)
};
Box::pin(fut)
}
_ => {
Box::pin(async move {
let mut response = http::Response::new(
tonic::body::Body::default(),
);
let headers = response.headers_mut();
headers
.insert(
tonic::Status::GRPC_STATUS,
(tonic::Code::Unimplemented as i32).into(),
);
headers
.insert(
http::header::CONTENT_TYPE,
tonic::metadata::GRPC_CONTENT_TYPE,
);
Ok(response)
})
}
}
}
}
impl<T> Clone for GossipServer<T> {
fn clone(&self) -> Self {
let inner = self.inner.clone();
Self {
inner,
accept_compression_encodings: self.accept_compression_encodings,
send_compression_encodings: self.send_compression_encodings,
max_decoding_message_size: self.max_decoding_message_size,
max_encoding_message_size: self.max_encoding_message_size,
}
}
}
pub const SERVICE_NAME: &str = "gossip.Gossip";
impl<T> tonic::server::NamedService for GossipServer<T> {
const NAME: &'static str = SERVICE_NAME;
}
}