Implement protobuf for iroh peer info
This commit is contained in:
parent
b53c7170eb
commit
b461dc39a7
12 changed files with 143 additions and 34 deletions
|
|
@ -1,4 +1,6 @@
|
|||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
tonic_prost_build::compile_protos("proto/caretta_sync.proto")?;
|
||||
tonic_prost_build::compile_protos("proto/iroh.proto")?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
43
core/proto/iroh.proto
Normal file
43
core/proto/iroh.proto
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
syntax = "proto3";
|
||||
package iroh;
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "google/protobuf/duration.proto";
|
||||
|
||||
service Iroh {
|
||||
rpc RemoteInfo(RemoteInfoRequest) returns (RemoteInfoMessage);
|
||||
rpc RemoteInfoIter(RemoteInfoIterRequest) returns (stream RemoteInfoMessage);
|
||||
}
|
||||
|
||||
message RemoteInfoRequest {
|
||||
string node_id = 1;
|
||||
}
|
||||
|
||||
message RemoteInfoIterRequest {}
|
||||
|
||||
message RemoteInfoMessage {
|
||||
string node_id = 1;
|
||||
string relay_url = 2;
|
||||
repeated DirectAddrInfoMessage addrs = 3;
|
||||
string conn_type = 4;
|
||||
google.protobuf.Duration latency = 5;
|
||||
google.protobuf.Duration last_used = 6;
|
||||
}
|
||||
|
||||
message DirectAddrInfoMessage {
|
||||
string addr = 1;
|
||||
google.protobuf.Duration latency = 2;
|
||||
LastControlMessage last_control = 3;
|
||||
google.protobuf.Duration last_payload = 4;
|
||||
google.protobuf.Duration last_alive = 5;
|
||||
repeated SourceMessage sources = 6;
|
||||
}
|
||||
|
||||
message LastControlMessage {
|
||||
google.protobuf.Duration duration = 1;
|
||||
string control_msg = 2;
|
||||
}
|
||||
|
||||
message SourceMessage {
|
||||
string source = 1;
|
||||
google.protobuf.Duration duration = 2;
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
use libp2p::Multiaddr;
|
||||
|
||||
use crate::cache::entity::CachedAddressModel;
|
||||
use crate::utils::utc_to_timestamp;
|
||||
use crate::proto::CachedAddressMessage;
|
||||
|
||||
impl From<&CachedAddressModel> for CachedAddressMessage {
|
||||
fn from(a: &CachedAddressModel) -> Self {
|
||||
Self {
|
||||
number: a.id,
|
||||
created_at: Some(utc_to_timestamp(&a.created_at)),
|
||||
updated_at: Some(utc_to_timestamp(&a.updated_at)),
|
||||
multiaddress: Multiaddr::from(a.multiaddress.clone()).to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
use crate::{cache::entity::{CachedAddressModel, CachedPeerModel}, proto::{CachedAddressMessage, CachedPeerMessage}, utils::utc_to_timestamp};
|
||||
|
||||
impl From<(&CachedPeerModel, &Vec<CachedAddressModel>)> for CachedPeerMessage {
|
||||
fn from(source: (&CachedPeerModel, &Vec<CachedAddressModel>)) -> Self {
|
||||
let (peer, addresses) = source;
|
||||
|
||||
Self {
|
||||
number: peer.id,
|
||||
peer_id: peer.peer_id.to_string(),
|
||||
created_at: Some(utc_to_timestamp(&peer.created_at)),
|
||||
addresses: addresses.iter().map(|x| CachedAddressMessage::from(x)).collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
18
core/src/proto/iroh/direct_addr_info_message.rs
Normal file
18
core/src/proto/iroh/direct_addr_info_message.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
use iroh::endpoint::DirectAddrInfo;
|
||||
use prost_types::DurationError;
|
||||
|
||||
use crate::proto::iroh::{DirectAddrInfoMessage, SourceMessage};
|
||||
|
||||
impl TryFrom<DirectAddrInfo> for DirectAddrInfoMessage {
|
||||
type Error = DurationError;
|
||||
fn try_from(value: DirectAddrInfo) -> Result<Self, Self::Error> {
|
||||
Ok(DirectAddrInfoMessage {
|
||||
addr: value.addr.to_string(),
|
||||
latency: value.latency.map(|x| x.try_into()).transpose()?,
|
||||
last_control: value.last_control.map(|x| super::LastControlMessage::try_from(x)).transpose()?,
|
||||
last_payload: value.last_payload.map(|x| x.try_into()).transpose()?,
|
||||
last_alive: value.last_alive.map(|x| x.try_into()).transpose()?,
|
||||
sources: value.sources.into_iter().map(|x| SourceMessage::try_from(x)).collect::<Result<Vec<SourceMessage>, DurationError>>()?
|
||||
})
|
||||
}
|
||||
}
|
||||
16
core/src/proto/iroh/last_control_message.rs
Normal file
16
core/src/proto/iroh/last_control_message.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use std::time::Duration;
|
||||
|
||||
use iroh::endpoint::ControlMsg;
|
||||
use prost_types::DurationError;
|
||||
|
||||
use crate::proto::iroh::LastControlMessage;
|
||||
|
||||
impl TryFrom<(Duration, ControlMsg)> for LastControlMessage {
|
||||
type Error = DurationError;
|
||||
fn try_from(value: (Duration, ControlMsg)) -> Result<Self, Self::Error> {
|
||||
Ok(LastControlMessage {
|
||||
duration: Some(value.0.try_into()?),
|
||||
control_msg: value.1.to_string()
|
||||
})
|
||||
}
|
||||
}
|
||||
8
core/src/proto/iroh/mod.rs
Normal file
8
core/src/proto/iroh/mod.rs
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
mod direct_addr_info_message;
|
||||
mod last_control_message;
|
||||
mod remote_info_iter_request;
|
||||
mod remote_info_message;
|
||||
mod remote_info_request;
|
||||
mod source_message;
|
||||
|
||||
tonic::include_proto!("iroh");
|
||||
7
core/src/proto/iroh/remote_info_iter_request.rs
Normal file
7
core/src/proto/iroh/remote_info_iter_request.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use crate::proto::iroh::RemoteInfoIterRequest;
|
||||
|
||||
impl RemoteInfoIterRequest {
|
||||
pub fn new() -> Self {
|
||||
Self{}
|
||||
}
|
||||
}
|
||||
20
core/src/proto/iroh/remote_info_message.rs
Normal file
20
core/src/proto/iroh/remote_info_message.rs
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
use iroh::endpoint::RemoteInfo;
|
||||
use prost_types::DurationError;
|
||||
|
||||
use crate::proto::iroh::{DirectAddrInfoMessage, RemoteInfoMessage};
|
||||
|
||||
impl TryFrom<RemoteInfo> for RemoteInfoMessage {
|
||||
type Error = DurationError;
|
||||
fn try_from(value: RemoteInfo) -> Result<Self, Self::Error> {
|
||||
Ok(Self {
|
||||
node_id: value.node_id.to_string(),
|
||||
relay_url: value.relay_url.map_or(String::from(""), |x| x.relay_url.to_string()),
|
||||
addrs: value.addrs.into_iter()
|
||||
.map(|x| DirectAddrInfoMessage::try_from(x))
|
||||
.collect::<Result<Vec<DirectAddrInfoMessage>,DurationError>>()?,
|
||||
conn_type: value.conn_type.to_string(),
|
||||
latency: value.latency.map(|x| x.try_into()).transpose()?,
|
||||
last_used: value.last_used.map(|x| x.try_into()).transpose()?,
|
||||
})
|
||||
}
|
||||
}
|
||||
11
core/src/proto/iroh/remote_info_request.rs
Normal file
11
core/src/proto/iroh/remote_info_request.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
use iroh::NodeId;
|
||||
|
||||
use crate::proto::iroh::RemoteInfoRequest;
|
||||
|
||||
impl From<NodeId> for RemoteInfoRequest {
|
||||
fn from(value: NodeId) -> Self {
|
||||
Self {
|
||||
node_id : value.to_string()
|
||||
}
|
||||
}
|
||||
}
|
||||
16
core/src/proto/iroh/source_message.rs
Normal file
16
core/src/proto/iroh/source_message.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use std::time::Duration;
|
||||
|
||||
use iroh::endpoint::Source;
|
||||
|
||||
use crate::proto::iroh::SourceMessage;
|
||||
|
||||
impl TryFrom<(Source, Duration)> for SourceMessage {
|
||||
type Error = prost_types::DurationError;
|
||||
fn try_from(src: (Source, Duration)) -> Result<Self, Self::Error> {
|
||||
let (source, duration )= src;
|
||||
Ok(Self {
|
||||
source: source.to_string(),
|
||||
duration: Some(duration.try_into()?),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
mod cached_address;
|
||||
mod cached_peer;
|
||||
pub mod iroh;
|
||||
|
||||
tonic::include_proto!("caretta_sync");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue