veilnet 0.4.4

Networking abstractions built on Veilid API primitives
Documentation
use async_trait::async_trait;

#[derive(Clone)]
pub struct RoutingContext(pub(super) veilid_core::RoutingContext);

impl From<veilid_core::RoutingContext> for RoutingContext {
    fn from(routing_context: veilid_core::RoutingContext) -> Self {
        RoutingContext(routing_context)
    }
}

#[async_trait]
impl crate::connection::RoutingContext for RoutingContext {
    fn api(&self) -> impl crate::connection::API {
        super::api::API(self.0.api())
    }

    async fn app_call(
        &self,
        target: veilid_core::Target,
        message: Vec<u8>,
    ) -> veilid_core::VeilidAPIResult<Vec<u8>> {
        self.0.app_call(target, message).await
    }

    async fn app_message(
        &self,
        target: veilid_core::Target,
        message: Vec<u8>,
    ) -> veilid_core::VeilidAPIResult<()> {
        self.0.app_message(target, message).await
    }

    async fn create_dht_record(
        &self,
        kind: veilid_core::CryptoKind,
        schema: veilid_core::DHTSchema,
        owner: Option<veilid_core::KeyPair>,
    ) -> veilid_core::VeilidAPIResult<veilid_core::DHTRecordDescriptor> {
        self.0.create_dht_record(kind, schema, owner).await
    }

    async fn open_dht_record(
        &self,
        key: veilid_core::RecordKey,
        default_writer: Option<veilid_core::KeyPair>,
    ) -> veilid_core::VeilidAPIResult<veilid_core::DHTRecordDescriptor> {
        self.0.open_dht_record(key, default_writer).await
    }

    async fn close_dht_record(
        &self,
        key: veilid_core::RecordKey,
    ) -> veilid_core::VeilidAPIResult<()> {
        self.0.close_dht_record(key).await
    }

    async fn delete_dht_record(
        &self,
        key: veilid_core::RecordKey,
    ) -> veilid_core::VeilidAPIResult<()> {
        self.0.delete_dht_record(key).await
    }

    async fn get_dht_value(
        &self,
        key: veilid_core::RecordKey,
        subkey: veilid_core::ValueSubkey,
        force_refresh: bool,
    ) -> veilid_core::VeilidAPIResult<Option<veilid_core::ValueData>> {
        self.0.get_dht_value(key, subkey, force_refresh).await
    }

    async fn set_dht_value(
        &self,
        key: veilid_core::RecordKey,
        subkey: veilid_core::ValueSubkey,
        data: Vec<u8>,
        options: Option<veilid_core::SetDHTValueOptions>,
    ) -> veilid_core::VeilidAPIResult<Option<veilid_core::ValueData>> {
        self.0.set_dht_value(key, subkey, data, options).await
    }

    async fn watch_dht_values(
        &self,
        key: veilid_core::RecordKey,
        subkeys: Option<veilid_core::ValueSubkeyRangeSet>,
        expiration: Option<veilid_core::Timestamp>,
        count: Option<u32>,
    ) -> veilid_core::VeilidAPIResult<bool> {
        self.0
            .watch_dht_values(key, subkeys, expiration, count)
            .await
    }

    async fn cancel_dht_watch(
        &self,
        key: veilid_core::RecordKey,
        subkeys: Option<veilid_core::ValueSubkeyRangeSet>,
    ) -> veilid_core::VeilidAPIResult<bool> {
        self.0.cancel_dht_watch(key, subkeys).await
    }

    async fn inspect_dht_record(
        &self,
        key: veilid_core::RecordKey,
        subkeys: Option<veilid_core::ValueSubkeyRangeSet>,
        scope: veilid_core::DHTReportScope,
    ) -> veilid_core::VeilidAPIResult<veilid_core::DHTRecordReport> {
        self.0.inspect_dht_record(key, subkeys, scope).await
    }
}