|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
+/// Diese Funktion parst die übergebene Nachricht und erkennt die Befehle
|
|
|
2
|
+/// "STAGE", "CONTROL" und "RETRIEVE". Bei den ersten beiden wird der nachfolgende
|
|
|
3
|
+/// String als Nachricht zurückgegeben; der Eingabestring wird bis zum ersten
|
|
|
4
|
+/// Zeilenumbruch gelesen. Wird kein Befehl erkannt, wird ein entsprechender
|
|
|
5
|
+/// Fehler zurückgegeben.
|
|
1
|
6
|
pub fn parse(message: &str) -> Result<Command, ParseError> {
|
|
2
|
7
|
let m: String = String::from(message.trim_right());
|
|
3
|
|
- let mut line = m.lines();
|
|
4
|
|
- match line.next() {
|
|
|
8
|
+ let mut line = m.lines(); // Eingabestring an Zeilenende abtrennen
|
|
|
9
|
+ match line.next() { // Betrachte nur die erste Zeile
|
|
5
|
10
|
Some(x) => {
|
|
6
|
|
- let mut str = x.split_whitespace();
|
|
|
11
|
+ let mut str = x.split_whitespace(); // Teile an Leerzeichen
|
|
7
|
12
|
match str.next() {
|
|
8
|
13
|
Some("STAGE") => {
|
|
9
|
|
- let msg = m[6..].trim_left();
|
|
|
14
|
+ let msg = m[6..].trim_left(); // msg = Alles außer STAGE
|
|
10
|
15
|
Ok(Command::Stage(msg.to_string()))
|
|
11
|
16
|
}
|
|
12
|
17
|
Some("CONTROL") => {
|
|
13
|
|
- let cmd = m[8..].trim_left();
|
|
|
18
|
+ let cmd = m[8..].trim_left(); // cmd = Alles außer CONTROL
|
|
14
|
19
|
Ok(Command::Control(cmd.to_string()))
|
|
15
|
20
|
}
|
|
16
|
21
|
Some("RETRIEVE") => Ok(Command::Retrieve),
|
|
|
@@ -22,6 +27,8 @@ pub fn parse(message: &str) -> Result<Command, ParseError> {
|
|
22
|
27
|
}
|
|
23
|
28
|
}
|
|
24
|
29
|
|
|
|
30
|
+/// Datentyp zur Beschreibung der durch parse() erkannten Befehle.
|
|
|
31
|
+/// Stage und Control liefern die Nachricht als String mit.
|
|
25
|
32
|
#[derive(Debug, PartialEq)]
|
|
26
|
33
|
pub enum Command {
|
|
27
|
34
|
Stage(String),
|
|
|
@@ -29,9 +36,11 @@ pub enum Command {
|
|
29
|
36
|
Retrieve,
|
|
30
|
37
|
}
|
|
31
|
38
|
|
|
|
39
|
+/// Datentyp zur Fehlerbehandlung. ErrorType gibt den Fehlertyp an.
|
|
32
|
40
|
#[derive(Debug, PartialEq)]
|
|
33
|
41
|
pub struct ParseError(pub ErrorType);
|
|
34
|
42
|
|
|
|
43
|
+/// Datentyp zur Beschreibung der in parse() auftretenden Fehlertypen.
|
|
35
|
44
|
#[derive(Debug, PartialEq)]
|
|
36
|
45
|
pub enum ErrorType {
|
|
37
|
46
|
UnknownCommand,
|