Skip to content

Commit b431d82

Browse files
committed
refactor: move range parser to parser module
1 parent 35bb5ba commit b431d82

3 files changed

Lines changed: 31 additions & 23 deletions

File tree

src/bin/server/handler.rs

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub fn gen_response (string : &str, state: &mut State) -> ReturnType {
101101
Exists(dbname.to_owned())
102102
} else
103103

104-
if string.starts_with("ADD ") {
104+
if string.starts_with("ADD ") || string.starts_with("INSERT ") {
105105
let parsed = if string.contains(" INTO ") {
106106
parser::parse_add_into(&string)
107107
} else {
@@ -122,27 +122,7 @@ pub fn gen_response (string : &str, state: &mut State) -> ReturnType {
122122
let count : Vec<&str> = count.split(" ").collect();
123123
let count = count[0].parse::<u32>().unwrap();
124124

125-
let ranged = string.contains(" FROM ");
126-
let range = if ranged {
127-
// range to query
128-
let from_epoch = string.clone()[(string.find(" FROM ").unwrap()+6)..]
129-
.split(" ")
130-
.collect::<Vec<&str>>()
131-
[0]
132-
.parse::<u64>()
133-
.unwrap()
134-
* 1000;
135-
let to_epoch = string.clone()[(string.find(" TO ").unwrap()+4)..]
136-
.split(" ")
137-
.collect::<Vec<&str>>()
138-
[0]
139-
.parse::<u64>()
140-
.unwrap()
141-
* 1000;
142-
Some((from_epoch, to_epoch))
143-
} else {
144-
None
145-
};
125+
let range = parser::parse_get_range(string);
146126

147127
// test if json
148128
let format = if string.contains(" AS JSON") { GetFormat::JSON } else { GetFormat::DTF };

src/bin/server/parser.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ pub fn parse_add_into(string: &str) -> (Option<Update>, Option<String>) {
6161
}
6262
}
6363

64+
pub fn parse_get_range(string: &str) -> Option<(u64, u64)> {
65+
if string.contains(" FROM ") {
66+
// range to query
67+
let from_epoch = string.clone()[(string.find(" FROM ").unwrap()+6)..]
68+
.split(" ")
69+
.collect::<Vec<&str>>()
70+
[0]
71+
.parse::<u64>()
72+
.unwrap()
73+
* 1000;
74+
let to_epoch = string.clone()[(string.find(" TO ").unwrap()+4)..]
75+
.split(" ")
76+
.collect::<Vec<&str>>()
77+
[0]
78+
.parse::<u64>()
79+
.unwrap()
80+
* 1000;
81+
Some((from_epoch, to_epoch))
82+
} else {
83+
None
84+
}
85+
}
6486

6587
#[cfg(test)]
6688
mod tests {

src/bin/server/state.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,13 @@ impl State {
403403
let result = ups_from_fs;
404404

405405
match count {
406-
ReqCount::Count(c) => return self._return_aux(&result[..c as usize], format),
406+
ReqCount::Count(c) => {
407+
if result.len() >= c as usize {
408+
return self._return_aux(&result[..(c as usize -1)], format);
409+
} else {
410+
return Some(ReturnType::Error(format!("Requested {} but only have {}.", c, result.len())))
411+
}
412+
}
407413
ReqCount::All => self._return_aux(&result, format),
408414
}
409415
}

0 commit comments

Comments
 (0)