hopr_transport/
proxy.rs

1use std::sync::{Arc, OnceLock};
2
3use hopr_crypto_types::types::Hash;
4use hopr_db_sql::api::tickets::{AggregationPrerequisites, HoprDbTicketOperations};
5use hopr_transport_p2p::swarm::{TicketAggregationRequestType, TicketAggregationResponseType};
6use hopr_transport_ticket_aggregation::{TicketAggregationActions, TicketAggregationError, TicketAggregatorTrait};
7
8#[derive(Debug, Clone)]
9pub struct TicketAggregatorProxy<Db>
10where
11    Db: HoprDbTicketOperations + Send + Sync + Clone + std::fmt::Debug,
12{
13    #[allow(dead_code)]
14    db: Db,
15    #[allow(dead_code)]
16    maybe_writer: Arc<OnceLock<TicketAggregationActions<TicketAggregationResponseType, TicketAggregationRequestType>>>,
17    #[allow(dead_code)]
18    agg_timeout: std::time::Duration,
19}
20
21impl<Db> TicketAggregatorProxy<Db>
22where
23    Db: HoprDbTicketOperations + Send + Sync + Clone + std::fmt::Debug,
24{
25    pub fn new(
26        db: Db,
27        maybe_writer: Arc<
28            OnceLock<TicketAggregationActions<TicketAggregationResponseType, TicketAggregationRequestType>>,
29        >,
30        agg_timeout: std::time::Duration,
31    ) -> Self {
32        Self {
33            db,
34            maybe_writer,
35            agg_timeout,
36        }
37    }
38}
39
40#[async_trait::async_trait]
41impl<Db> TicketAggregatorTrait for TicketAggregatorProxy<Db>
42where
43    Db: HoprDbTicketOperations + Send + Sync + Clone + std::fmt::Debug,
44{
45    async fn aggregate_tickets(
46        &self,
47        _channel: &Hash,
48        _prerequisites: AggregationPrerequisites,
49    ) -> hopr_transport_ticket_aggregation::Result<()> {
50        // if let Some(writer) = self.maybe_writer.clone().get() {
51        //     AwaitingAggregator::new(self.db.clone(), writer.clone(), self.agg_timeout)
52        //         .aggregate_tickets(channel, prerequisites)
53        //         .await
54        // } else {
55        //     Err(TicketAggregationError::TransportError(
56        //         "Ticket aggregation writer not available, the object was not yet initialized".to_string(),
57        //     ))
58        // }
59
60        Err(TicketAggregationError::TransportError(
61            "Ticket aggregation not supported as a session protocol yet".to_string(),
62        ))
63    }
64}