Skip to main content

relay_knowledge/adapters/
worker_outbound.rs

1//! QoS-governed network adapter for external worker JSON requests.
2
3use crate::{
4    net::{NetworkRuntime, http},
5    ports::worker_outbound::{WorkerOutboundError, WorkerOutboundFuture, WorkerOutboundPort},
6};
7
8#[derive(Clone)]
9pub struct NetworkWorkerOutbound {
10    network: NetworkRuntime,
11}
12
13impl NetworkWorkerOutbound {
14    pub fn new(network: NetworkRuntime) -> Self {
15        Self { network }
16    }
17}
18
19impl WorkerOutboundPort for NetworkWorkerOutbound {
20    fn post_json<'a>(
21        &'a self,
22        endpoint: &'a str,
23        payload: &'a serde_json::Value,
24    ) -> WorkerOutboundFuture<'a> {
25        Box::pin(async move {
26            let network = self.network.current();
27            http::post_json_with_qos(
28                &network.http,
29                &self.network.qos_runtime(),
30                &network.qos,
31                endpoint,
32                payload,
33            )
34            .await
35            .map_err(|error| WorkerOutboundError {
36                message: error.to_string(),
37            })
38        })
39    }
40}