fn next()

in src/compiler/args.rs [173:210]


    fn next(&mut self) -> Option<Self::Item> {
        let result = match *self.arg {
            Argument::Raw(ref s) | Argument::UnknownFlag(ref s) => match self.emitted {
                0 => Some(s.clone()),
                _ => None,
            },
            Argument::Flag(s, _) => match self.emitted {
                0 => Some(s.into()),
                _ => None,
            },
            Argument::WithValue(s, ref v, ref d) => match (self.emitted, d) {
                (0, &ArgDisposition::CanBeSeparated(d)) | (0, &ArgDisposition::Concatenated(d)) => {
                    let mut s = OsString::from(s);
                    let v = v.clone().into_arg_os_string();
                    if let Some(d) = d {
                        if !v.is_empty() {
                            s.push(OsString::from(
                                str::from_utf8(&[d]).expect("delimiter should be ascii"),
                            ));
                        }
                    }
                    s.push(v);
                    Some(s)
                }
                (0, &ArgDisposition::Separated) | (0, &ArgDisposition::CanBeConcatenated(_)) => {
                    Some(s.into())
                }
                (1, &ArgDisposition::Separated) | (1, &ArgDisposition::CanBeConcatenated(_)) => {
                    Some(v.clone().into_arg_os_string())
                }
                _ => None,
            },
        };
        if result.is_some() {
            self.emitted += 1;
        }
        result
    }