Skip to main content

hashtree_cli/webrtc/
types.rs

1//! Mesh signaling and transport types compatible with hashtree-ts.
2
3pub use hashtree_network::{
4    decrement_htl_with_policy, should_forward_htl, validate_mesh_frame, DataChunk, DataMessage,
5    DataPayment, DataPaymentAck, DataQuoteRequest, DataQuoteResponse, DataRequest, DataResponse,
6    HtlMode, HtlPolicy, IceCandidate, MeshNostrFrame, MeshNostrPayload, PeerDirection,
7    PeerHTLConfig, PeerId, PeerPool, PeerStateEvent, PeerStatus, PoolConfig, PoolSettings,
8    RequestDispatchConfig, SelectionStrategy, SignalingMessage, TimedSeenSet, WebRTCConfig,
9    BLOB_REQUEST_POLICY, DECREMENT_AT_MAX_PROB, DECREMENT_AT_MIN_PROB, MAX_HTL, MESH_DEFAULT_HTL,
10    MESH_EVENT_POLICY, MESH_MAX_HTL, MESH_PROTOCOL, MESH_PROTOCOL_VERSION, MSG_TYPE_CHUNK,
11    MSG_TYPE_PAYMENT, MSG_TYPE_PAYMENT_ACK, MSG_TYPE_QUOTE_REQUEST, MSG_TYPE_QUOTE_RESPONSE,
12    MSG_TYPE_REQUEST, MSG_TYPE_RESPONSE,
13};
14
15pub fn decrement_htl(htl: u8, config: &PeerHTLConfig) -> u8 {
16    decrement_htl_with_policy(htl, &BLOB_REQUEST_POLICY, config)
17}
18
19pub fn should_forward(htl: u8) -> bool {
20    should_forward_htl(htl)
21}
22
23pub const WEBRTC_KIND: u64 = hashtree_network::MESH_SIGNALING_EVENT_KIND as u64;
24pub const HELLO_TAG: &str = "hello";
25pub const WEBRTC_TAG: &str = "webrtc";
26
27pub fn encode_request(req: &DataRequest) -> Result<Vec<u8>, rmp_serde::encode::Error> {
28    Ok(hashtree_network::encode_request(req))
29}
30
31pub fn encode_response(res: &DataResponse) -> Result<Vec<u8>, rmp_serde::encode::Error> {
32    Ok(hashtree_network::encode_response(res))
33}
34
35pub fn encode_quote_request(req: &DataQuoteRequest) -> Result<Vec<u8>, rmp_serde::encode::Error> {
36    Ok(hashtree_network::encode_quote_request(req))
37}
38
39pub fn encode_quote_response(res: &DataQuoteResponse) -> Result<Vec<u8>, rmp_serde::encode::Error> {
40    Ok(hashtree_network::encode_quote_response(res))
41}
42
43pub fn encode_payment(req: &DataPayment) -> Result<Vec<u8>, rmp_serde::encode::Error> {
44    Ok(hashtree_network::encode_payment(req))
45}
46
47pub fn encode_payment_ack(res: &DataPaymentAck) -> Result<Vec<u8>, rmp_serde::encode::Error> {
48    Ok(hashtree_network::encode_payment_ack(res))
49}
50
51pub fn encode_chunk(chunk: &DataChunk) -> Result<Vec<u8>, rmp_serde::encode::Error> {
52    Ok(hashtree_network::encode_chunk(chunk))
53}
54
55pub fn parse_message(data: &[u8]) -> Result<DataMessage, rmp_serde::decode::Error> {
56    let msg_type = data.first().copied().unwrap_or_default();
57    hashtree_network::parse_message(data)
58        .ok_or(rmp_serde::decode::Error::LengthMismatch(msg_type as u32))
59}
60
61pub fn hash_to_hex(hash: &[u8]) -> String {
62    hashtree_network::hash_to_key(hash)
63}
64
65pub fn encode_message(msg: &DataMessage) -> Result<Vec<u8>, rmp_serde::encode::Error> {
66    match msg {
67        DataMessage::Request(req) => encode_request(req),
68        DataMessage::Response(res) => encode_response(res),
69        DataMessage::QuoteRequest(req) => encode_quote_request(req),
70        DataMessage::QuoteResponse(res) => encode_quote_response(res),
71        DataMessage::Payment(req) => encode_payment(req),
72        DataMessage::PaymentAck(res) => encode_payment_ack(res),
73        DataMessage::Chunk(chunk) => encode_chunk(chunk),
74    }
75}