aboutsummaryrefslogtreecommitdiff
path: root/src/gens.rs
blob: cd0af16754f3df6bde46bfab880eeb2c6e1ecc36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! Helpers to determine if a node can send a particular packet.

/// These functions are unfortunately all a bit stringly typed atm
pub mod can_send {
    use crate::data::{Level, PacketType, Upgrade};
    use Level::*;

    #[inline]
    pub fn base() -> Vec<&'static str> {
        vec!["ping", "capture"]
    }

    /// Guard nodes are the most versatile
    #[inline]
    pub fn guard(lvl: Level) -> Vec<&'static str> {
        match lvl {
            // This is just kinda gross
            One => {
                let mut p = base();
                p.append(&mut vec!["payload", "cns", "reset"]);
                p
            }
            Two => {
                let mut p = guard(One);
                p.append(&mut vec!["nitm", "virus"]);
                p
            }
            Three => {
                let mut p = guard(Two);
                p.append(&mut vec!["takeover"]);
                p
            }
        }
    }

    /// Compute nodes can sennd compute packets
    pub fn compute() -> Vec<&'static str> {
        let mut p = base();
        p.append(&mut vec!["compute"]);
        p
    }

    /// Relays only relay!
    pub fn relay() -> Vec<&'static str> {
        vec![]
    }
}