aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authoracdenisSK <[email protected]>2018-05-26 22:16:17 +0200
committeracdenisSK <[email protected]>2018-05-26 22:18:35 +0200
commit63469753a960431e5edacf520589493121f0e62d (patch)
tree2eddaa00247d7bdf798708ac6c0bba0a9c6473c0 /src/framework
parentSwitch to match_indices for occurences (diff)
downloadserenity-63469753a960431e5edacf520589493121f0e62d.tar.xz
serenity-63469753a960431e5edacf520589493121f0e62d.zip
Remove "if length == 1" branch
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/args.rs40
1 files changed, 13 insertions, 27 deletions
diff --git a/src/framework/standard/args.rs b/src/framework/standard/args.rs
index dcf328d..d25b3fc 100644
--- a/src/framework/standard/args.rs
+++ b/src/framework/standard/args.rs
@@ -94,39 +94,26 @@ fn parse<T: FromStr>(s: &mut String, delimiters: &[String]) -> Result<T, T::Err>
return Err(Error::Eos);
}
- if delimiters.len() == 1 {
- let delim = &delimiters[0];
- let mut pos = s.find(delim).unwrap_or_else(|| s.len());
- let res = (&s[..pos]).parse::<T>().map_err(Error::Parse)?;
+ let (mut smallest_pos, delimiter_len) = delimiters.iter().fold((s.len(), 0usize), |mut acc, delim| {
+ let other_pos = s.find(delim).unwrap_or_else(|| s.len());
- if pos < s.len() {
- pos += delim.len();
+ if acc.0 > other_pos {
+ acc.0 = other_pos;
+ acc.1 = delim.len();
}
- s.drain(..pos);
- Ok(res)
- } else {
- let (mut smallest_pos, delimiter_len) = delimiters.iter().fold((s.len(), 0usize), |mut acc, delim| {
- let other_pos = s.find(delim).unwrap_or_else(|| s.len());
+ acc
+ });
- if acc.0 > other_pos {
- acc.0 = other_pos;
- acc.1 = delim.len();
- }
-
- acc
- });
+ let res = (&s[..smallest_pos]).parse::<T>().map_err(Error::Parse)?;
- let res = (&s[..smallest_pos]).parse::<T>().map_err(Error::Parse)?;
-
- if smallest_pos < s.len() {
- smallest_pos += delimiter_len;
- }
+ if smallest_pos < s.len() {
+ smallest_pos += delimiter_len;
+ }
- s.drain(..smallest_pos);
+ s.drain(..smallest_pos);
- Ok(res)
- }
+ Ok(res)
}
/// A utility struct for handling arguments of a command.
@@ -555,7 +542,6 @@ impl Args {
// TODO: Make this efficient
if self.delimiters.len() == 1 as usize {
-
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<_>>();