aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authoracdenisSK <[email protected]>2018-05-27 16:22:44 +0200
committeracdenisSK <[email protected]>2018-05-27 16:23:21 +0200
commit5ba521b4e8bb5ff10bd83303436cd454f27c93ab (patch)
tree9eaa2f0867eb34fe8c8c743351ae890d91330b08 /src/framework
parentFurther improve `Args` (the struct) documentation (diff)
downloadserenity-5ba521b4e8bb5ff10bd83303436cd454f27c93ab.tar.xz
serenity-5ba521b4e8bb5ff10bd83303436cd454f27c93ab.zip
Do some little optimizations on `find(_n)`
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/args.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/framework/standard/args.rs b/src/framework/standard/args.rs
index 7148e3e..701b7f2 100644
--- a/src/framework/standard/args.rs
+++ b/src/framework/standard/args.rs
@@ -543,14 +543,24 @@ impl Args {
where T::Err: StdError {
// TODO: Make this efficient
- if self.delimiters.len() == 1 as usize {
+ if self.delimiters.len() == 1 {
match self.message.split(&self.delimiters[0]).position(|e| e.parse::<T>().is_ok()) {
Some(index) => {
- let mut vec = self.message.split(self.delimiters[0].as_str()).map(|s| s.to_string()).collect::<Vec<_>>();
- let mut ss = vec.remove(index);
- let res = parse::<T>(&mut ss, &self.delimiters);
- self.message = vec.join(&self.delimiters[0]);
+ fn do_stuff(msg: &str, delim: &str, index: usize) -> (String, String) {
+ let mut vec = msg.split(delim).collect::<Vec<_>>();
+
+ let found = vec.remove(index);
+ let new_state = vec.join(delim);
+
+ (found.to_string(), new_state)
+ }
+
+ let (mut s, msg) = do_stuff(&self.message, &self.delimiters[0], index);
+ let res = parse::<T>(&mut s, &self.delimiters);
+ self.message = msg;
+
if let Some(ref mut val) = self.len { if 1 <= *val { *val -= 1 } };
+
res
},
None => Err(Error::Eos),
@@ -605,9 +615,8 @@ impl Args {
match pos {
Some(index) => {
- let mut vec = self.message.split(&self.delimiters[0]).map(|s| s.to_string()).collect::<Vec<_>>();
- let mut ss = vec.remove(index);
- parse::<T>(&mut ss, &self.delimiters)
+ let ss = self.message.split(&self.delimiters[0]).nth(index).unwrap();
+ parse::<T>(&mut ss.to_string(), &self.delimiters)
},
None => Err(Error::Eos),
}