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 Err(TicketAggregationError::TransportError(
61 "Ticket aggregation not supported as a session protocol yet".to_string(),
62 ))
63 }
64}