dtn7/cla/
dummy.rs

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        // my_name() is generated from cla proc macro attribute
50        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}