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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#[cfg(test)]
mod tests;

use super::super::ControllerType;

#[derive(Debug, PartialEq)]
pub enum AccessControllerType {
    Help,

    GetUsers,
    SetUsers(Option<Vec<String>>),

    GetRoomLocalAgentManagers,
    SetRoomLocalAgentManagers(Option<Vec<String>>),
}

pub fn determine_controller(text: &str) -> ControllerType {
    if text.starts_with("users") {
        return ControllerType::Access(AccessControllerType::GetUsers);
    }

    if let Some(patterns_string) = text.strip_prefix("set-users") {
        let patterns_string = patterns_string.trim().to_owned();

        let patterns_option = if patterns_string.is_empty() {
            None
        } else {
            let patterns_vector = patterns_string
                .split(" ")
                .map(|s| s.to_string())
                .collect::<Vec<String>>();

            Some(patterns_vector)
        };

        return ControllerType::Access(AccessControllerType::SetUsers(patterns_option));
    }

    if text.starts_with("room-local-agent-managers") {
        return ControllerType::Access(AccessControllerType::GetRoomLocalAgentManagers);
    }

    if let Some(patterns_string) = text.strip_prefix("set-room-local-agent-managers") {
        let patterns_string = patterns_string.trim().to_owned();

        let patterns_option = if patterns_string.is_empty() {
            None
        } else {
            let patterns_vector = patterns_string
                .split(" ")
                .map(|s| s.to_string())
                .collect::<Vec<String>>();

            Some(patterns_vector)
        };

        return ControllerType::Access(AccessControllerType::SetRoomLocalAgentManagers(
            patterns_option,
        ));
    }

    ControllerType::Access(AccessControllerType::Help)
}