1use std::collections::HashMap;
2
3use super::TransferResult;
4use super::{ConvergenceLayerAgent, HelpStr};
5use async_trait::async_trait;
6use dtn7_codegen::cla;
7use log::debug;
8use tokio::sync::mpsc;
9
10#[cla(dummy)]
11#[derive(Debug, Clone)]
12pub struct DummyConvergenceLayer {
13 tx: mpsc::Sender<super::ClaCmd>,
14}
15
16impl DummyConvergenceLayer {
17 pub fn new(_local_settings: Option<&HashMap<String, String>>) -> DummyConvergenceLayer {
18 let (tx, mut rx) = mpsc::channel(1);
19 tokio::spawn(async move {
20 while let Some(cmd) = rx.recv().await {
21 match cmd {
22 super::ClaCmd::Transfer(remote, _, reply) => {
23 debug!(
24 "DummyConvergenceLayer: received transfer command for {}",
25 remote
26 );
27 reply.send(TransferResult::Successful).unwrap();
28 }
29 super::ClaCmd::Shutdown => {
30 debug!("DummyConvergenceLayer: received shutdown command");
31 break;
32 }
33 }
34 }
35 });
36 DummyConvergenceLayer { tx }
37 }
38}
39
40#[async_trait]
41impl ConvergenceLayerAgent for DummyConvergenceLayer {
42 async fn setup(&mut self) {}
43
44 fn port(&self) -> u16 {
45 0
46 }
47
48 fn name(&self) -> &str {
49 self.my_name()
51 }
52
53 fn channel(&self) -> tokio::sync::mpsc::Sender<super::ClaCmd> {
54 self.tx.clone()
55 }
56}
57
58impl HelpStr for DummyConvergenceLayer {}
59
60impl std::fmt::Display for DummyConvergenceLayer {
61 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
62 write!(f, "dummy")
63 }
64}