From 052f51ff7115f362c2049c369c4f64864ab3412f Mon Sep 17 00:00:00 2001 From: Daniel Eades Date: Thu, 25 Nov 2021 12:39:52 +0000 Subject: [PATCH] deglob some enums, use concise iteration syntax --- crates/arti-client/src/config.rs | 2 +- crates/arti-config/src/cmdline.rs | 2 +- crates/retry-error/src/lib.rs | 2 +- crates/tor-cell/src/chancell/msg.rs | 8 +-- crates/tor-cell/src/relaycell/msg.rs | 30 ++++---- crates/tor-circmgr/src/mgr.rs | 2 +- crates/tor-config/src/err.rs | 1 + crates/tor-consdiff/src/lib.rs | 69 ++++++++----------- crates/tor-dirmgr/src/bootstrap.rs | 2 +- crates/tor-dirmgr/src/state.rs | 2 +- crates/tor-guardmgr/src/sample.rs | 12 ++-- crates/tor-netdir/src/lib.rs | 4 +- crates/tor-netdoc/src/doc/netstatus.rs | 6 +- .../tor-netdoc/src/types/policy/portpolicy.rs | 4 +- crates/tor-protover/src/lib.rs | 2 +- 15 files changed, 68 insertions(+), 80 deletions(-) diff --git a/crates/arti-client/src/config.rs b/crates/arti-client/src/config.rs index a35648bd9..465013477 100644 --- a/crates/arti-client/src/config.rs +++ b/crates/arti-client/src/config.rs @@ -214,7 +214,7 @@ impl TorClientConfig { dircfg.network_config(self.tor_network.clone()); dircfg.schedule_config(self.download_schedule.clone()); dircfg.cache_path(self.storage.expand_cache_dir()?); - for (k, v) in self.override_net_params.iter() { + for (k, v) in &self.override_net_params { dircfg.override_net_param(k.clone(), *v); } dircfg.build() diff --git a/crates/arti-config/src/cmdline.rs b/crates/arti-config/src/cmdline.rs index 50de44e8a..c843535b2 100644 --- a/crates/arti-config/src/cmdline.rs +++ b/crates/arti-config/src/cmdline.rs @@ -67,7 +67,7 @@ impl CmdLine { /// Compose elements of this cmdline into a single toml string. fn build_toml(&self) -> String { let mut toml_s = String::new(); - for line in self.contents.iter() { + for line in &self.contents { toml_s.push_str(tweak_toml_bareword(line).as_ref().unwrap_or(line)); toml_s.push('\n'); } diff --git a/crates/retry-error/src/lib.rs b/crates/retry-error/src/lib.rs index 9377c6e4f..fccb0f63e 100644 --- a/crates/retry-error/src/lib.rs +++ b/crates/retry-error/src/lib.rs @@ -246,7 +246,7 @@ impl Display for RetryError { self.doing, n )?; - for (attempt, e) in self.errors.iter() { + for (attempt, e) in &self.errors { write!(f, "\n{}: {}", attempt, e)?; } Ok(()) diff --git a/crates/tor-cell/src/chancell/msg.rs b/crates/tor-cell/src/chancell/msg.rs index a6484b9a8..993c73b89 100644 --- a/crates/tor-cell/src/chancell/msg.rs +++ b/crates/tor-cell/src/chancell/msg.rs @@ -644,7 +644,7 @@ impl Body for Netinfo { .try_into() .expect("Too many addrs in netinfo cell"); w.write_u8(n_addrs); - for addr in self.my_addr.iter() { + for addr in &self.my_addr { enc_one_netinfo_addr(w, addr); } } @@ -732,7 +732,7 @@ impl Body for Versions { ChanMsg::Versions(self) } fn write_body_onto(self, w: &mut W) { - for v in self.versions.iter() { + for v in &self.versions { w.write_u16(*v); } } @@ -907,7 +907,7 @@ impl Body for Certs { .try_into() .expect("Too many certs to encode in cell."); w.write_u8(n_certs); - for c in self.certs.iter() { + for c in &self.certs { enc_one_tor_cert(w, c) } } @@ -964,7 +964,7 @@ impl Body for AuthChallenge { w.write_all(&self.challenge[..]); assert!(self.methods.len() <= std::u16::MAX as usize); w.write_u16(self.methods.len() as u16); - for m in self.methods.iter() { + for m in &self.methods { w.write_u16(*m); } } diff --git a/crates/tor-cell/src/relaycell/msg.rs b/crates/tor-cell/src/relaycell/msg.rs index e592be2c8..9c802faa5 100644 --- a/crates/tor-cell/src/relaycell/msg.rs +++ b/crates/tor-cell/src/relaycell/msg.rs @@ -789,7 +789,7 @@ impl Body for Extend2 { fn encode_onto(self, w: &mut Vec) { let n_linkspecs: u8 = self.linkspec.len().try_into().expect("Too many linkspecs"); w.write_u8(n_linkspecs); - for ls in self.linkspec.iter() { + for ls in &self.linkspec { w.write(ls); } w.write_u16(self.handshake_type); @@ -971,53 +971,51 @@ impl Readable for ResolvedVal { return Err(Error::BadMessage("Wrong length for RESOLVED answer")); } } - use ResolvedVal::*; Ok(match tp { - RES_HOSTNAME => Hostname(r.take(len)?.into()), - RES_IPV4 => Ip(IpAddr::V4(r.extract()?)), - RES_IPV6 => Ip(IpAddr::V6(r.extract()?)), + RES_HOSTNAME => Self::Hostname(r.take(len)?.into()), + RES_IPV4 => Self::Ip(IpAddr::V4(r.extract()?)), + RES_IPV6 => Self::Ip(IpAddr::V6(r.extract()?)), RES_ERR_TRANSIENT => { r.advance(len)?; - TransientError + Self::TransientError } RES_ERR_NONTRANSIENT => { r.advance(len)?; - NontransientError + Self::NontransientError } - _ => Unrecognized(tp, r.take(len)?.into()), + _ => Self::Unrecognized(tp, r.take(len)?.into()), }) } } impl Writeable for ResolvedVal { fn write_onto(&self, w: &mut B) { - use ResolvedVal::*; match self { - Hostname(h) => { + Self::Hostname(h) => { w.write_u8(RES_HOSTNAME); let h_len: u8 = h.len().try_into().expect("Hostname too long"); w.write_u8(h_len); w.write_all(&h[..]); } - Ip(IpAddr::V4(a)) => { + Self::Ip(IpAddr::V4(a)) => { w.write_u8(RES_IPV4); w.write_u8(4); // length w.write(a); } - Ip(IpAddr::V6(a)) => { + Self::Ip(IpAddr::V6(a)) => { w.write_u8(RES_IPV6); w.write_u8(16); // length w.write(a); } - TransientError => { + Self::TransientError => { w.write_u8(RES_ERR_TRANSIENT); w.write_u8(0); // length } - NontransientError => { + Self::NontransientError => { w.write_u8(RES_ERR_NONTRANSIENT); w.write_u8(0); // length } - Unrecognized(tp, v) => { + Self::Unrecognized(tp, v) => { w.write_u8(*tp); let v_len: u8 = v .len() @@ -1090,7 +1088,7 @@ impl Body for Resolved { Ok(Resolved { answers }) } fn encode_onto(self, w: &mut Vec) { - for (rv, ttl) in self.answers.iter() { + for (rv, ttl) in &self.answers { w.write(rv); w.write_u32(*ttl); } diff --git a/crates/tor-circmgr/src/mgr.rs b/crates/tor-circmgr/src/mgr.rs index 308ad7cd6..f226c5d0c 100644 --- a/crates/tor-circmgr/src/mgr.rs +++ b/crates/tor-circmgr/src/mgr.rs @@ -786,7 +786,7 @@ impl AbstractCircMgr { // all have failed) let best = PendingEntry::find_best(&pending, usage); if restrict_circ { - for item in best.iter() { + for item in &best { // TODO: Do we want to tentatively restrict _all_ of these? // not clear to me. item.tentative_restrict_mut(usage)?; diff --git a/crates/tor-config/src/err.rs b/crates/tor-config/src/err.rs index ebcaf21cc..f9419a858 100644 --- a/crates/tor-config/src/err.rs +++ b/crates/tor-config/src/err.rs @@ -92,6 +92,7 @@ mod test { #[derive(derive_builder::Builder, Debug)] #[builder(build_fn(error = "ConfigBuildError"))] + #[allow(dead_code)] struct Cephalopod { // arms have suction cups for their whole length arms: u8, diff --git a/crates/tor-consdiff/src/lib.rs b/crates/tor-consdiff/src/lib.rs index 4433a63a3..ad019a50f 100644 --- a/crates/tor-consdiff/src/lib.rs +++ b/crates/tor-consdiff/src/lib.rs @@ -221,19 +221,18 @@ impl<'a> DiffCommand<'a> { /// implementation is potentially O(n) in the size of the input. #[cfg(any(test, fuzzing, feature = "slow-diff-apply"))] fn apply_to(&self, target: &mut DiffResult<'a>) -> Result<()> { - use DiffCommand::*; match self { - Delete { low, high } => { + Self::Delete { low, high } => { target.remove_lines(*low, *high)?; } - DeleteToEnd { low } => { + Self::DeleteToEnd { low } => { target.remove_lines(*low, target.lines.len())?; } - Replace { low, high, lines } => { + Self::Replace { low, high, lines } => { target.remove_lines(*low, *high)?; target.insert_at(*low, lines)?; } - Insert { pos, lines } => { + Self::Insert { pos, lines } => { // This '+1' seems off, but it's what the spec says. I wonder // if the spec is wrong. target.insert_at(*pos + 1, lines)?; @@ -295,10 +294,8 @@ impl<'a> DiffCommand<'a> { /// Return the lines that we should add to the output fn lines(&self) -> Option<&[&'a str]> { - use DiffCommand::*; match self { - Replace { lines, .. } => Some(lines.as_slice()), - Insert { lines, .. } => Some(lines.as_slice()), + Self::Replace { lines, .. } | Self::Insert { lines, .. } => Some(lines.as_slice()), _ => None, } } @@ -306,10 +303,8 @@ impl<'a> DiffCommand<'a> { /// Return a mutable reference to the vector of lines we should /// add to the output. fn linebuf_mut(&mut self) -> Option<&mut Vec<&'a str>> { - use DiffCommand::*; match self { - Replace { ref mut lines, .. } => Some(lines), - Insert { ref mut lines, .. } => Some(lines), + Self::Replace { ref mut lines, .. } | Self::Insert { ref mut lines, .. } => Some(lines), _ => None, } } @@ -319,12 +314,10 @@ impl<'a> DiffCommand<'a> { /// /// We use this line number to know which lines we should copy. fn following_lines(&self) -> Option { - use DiffCommand::*; match self { - Delete { high, .. } => Some(high + 1), - DeleteToEnd { .. } => None, - Replace { high, .. } => Some(high + 1), - Insert { pos, .. } => Some(pos + 1), + Self::Delete { high, .. } | Self::Replace { high, .. } => Some(high + 1), + Self::DeleteToEnd { .. } => None, + Self::Insert { pos, .. } => Some(pos + 1), } } @@ -334,18 +327,17 @@ impl<'a> DiffCommand<'a> { /// This can be the same as following_lines(), if we shouldn't /// actually remove any lines. fn first_removed_line(&self) -> usize { - use DiffCommand::*; match self { - Delete { low, .. } => *low, - DeleteToEnd { low } => *low, - Replace { low, .. } => *low, - Insert { pos, .. } => *pos + 1, + Self::Delete { low, .. } => *low, + Self::DeleteToEnd { low } => *low, + Self::Replace { low, .. } => *low, + Self::Insert { pos, .. } => *pos + 1, } } /// Return true if this is an Insert command. fn is_insert(&self) -> bool { - matches!(self, DiffCommand::Insert { .. }) + matches!(self, Self::Insert { .. }) } /// Extract a single command from a line iterator that yields lines @@ -380,8 +372,6 @@ impl<'a> DiffCommand<'a> { return Err(Error::BadDiff("range cannot begin at usize::MAX")); } - use DiffCommand::*; - match (low, high) { (lo, Some(RangeEnd::Num(hi))) if lo > hi.into() => { return Err(Error::BadDiff("mis-ordered lines in range")) @@ -390,23 +380,23 @@ impl<'a> DiffCommand<'a> { } let mut cmd = match (command, low, high) { - ("d", low, None) => Delete { low, high: low }, - ("d", low, Some(RangeEnd::Num(high))) => Delete { + ("d", low, None) => Self::Delete { low, high: low }, + ("d", low, Some(RangeEnd::Num(high))) => Self::Delete { low, high: high.into(), }, - ("d", low, Some(RangeEnd::DollarSign)) => DeleteToEnd { low }, - ("c", low, None) => Replace { + ("d", low, Some(RangeEnd::DollarSign)) => Self::DeleteToEnd { low }, + ("c", low, None) => Self::Replace { low, high: low, lines: Vec::new(), }, - ("c", low, Some(RangeEnd::Num(high))) => Replace { + ("c", low, Some(RangeEnd::Num(high))) => Self::Replace { low, high: high.into(), lines: Vec::new(), }, - ("a", low, None) => Insert { + ("a", low, None) => Self::Insert { pos: low, lines: Vec::new(), }, @@ -551,7 +541,7 @@ impl<'a> DiffResult<'a> { use digest::Digest; use tor_llcrypto::d::Sha3_256; let mut d = Sha3_256::new(); - for line in self.lines.iter() { + for line in &self.lines { d.update(line.as_bytes()); d.update(b"\n"); } @@ -565,7 +555,7 @@ impl<'a> DiffResult<'a> { impl<'a> Display for DiffResult<'a> { fn fmt(&self, f: &mut Formatter<'_>) -> std::result::Result<(), std::fmt::Error> { - for elt in self.lines.iter() { + for elt in &self.lines { writeln!(f, "{}", elt)? } Ok(()) @@ -671,7 +661,6 @@ mod test { #[test] fn parse_command() -> Result<()> { - use DiffCommand::*; fn parse(s: &str) -> Result> { let mut iter = s.lines(); let cmd = DiffCommand::from_line_iterator(&mut iter)?; @@ -689,16 +678,16 @@ mod test { } let p = parse("3,8d\n")?; - assert!(matches!(p, Delete { low: 3, high: 8 })); + assert!(matches!(p, DiffCommand::Delete { low: 3, high: 8 })); let p = parse("3d\n")?; - assert!(matches!(p, Delete { low: 3, high: 3 })); + assert!(matches!(p, DiffCommand::Delete { low: 3, high: 3 })); let p = parse("100,$d\n")?; - assert!(matches!(p, DeleteToEnd { low: 100 })); + assert!(matches!(p, DiffCommand::DeleteToEnd { low: 100 })); let p = parse("30,40c\nHello\nWorld\n.\n")?; assert!(matches!( p, - Replace { + DiffCommand::Replace { low: 30, high: 40, .. @@ -708,7 +697,7 @@ mod test { let p = parse("30c\nHello\nWorld\n.\n")?; assert!(matches!( p, - Replace { + DiffCommand::Replace { low: 30, high: 30, .. @@ -717,10 +706,10 @@ mod test { assert_eq!(p.lines(), Some(&["Hello", "World"][..])); let p = parse("999a\nHello\nWorld\n.\n")?; - assert!(matches!(p, Insert { pos: 999, .. })); + assert!(matches!(p, DiffCommand::Insert { pos: 999, .. })); assert_eq!(p.lines(), Some(&["Hello", "World"][..])); let p = parse("0a\nHello\nWorld\n.\n")?; - assert!(matches!(p, Insert { pos: 0, .. })); + assert!(matches!(p, DiffCommand::Insert { pos: 0, .. })); assert_eq!(p.lines(), Some(&["Hello", "World"][..])); parse_err("hello world"); diff --git a/crates/tor-dirmgr/src/bootstrap.rs b/crates/tor-dirmgr/src/bootstrap.rs index 57899e442..955458760 100644 --- a/crates/tor-dirmgr/src/bootstrap.rs +++ b/crates/tor-dirmgr/src/bootstrap.rs @@ -426,7 +426,7 @@ mod test { _storage: Option<&Mutex>, ) -> Result { let mut changed = false; - for (id, _ignore) in docs.iter() { + for id in docs.keys() { if let DocId::Microdesc(id) = id { if self.got_items.get(id) == Some(&false) { self.got_items.insert(*id, true); diff --git a/crates/tor-dirmgr/src/state.rs b/crates/tor-dirmgr/src/state.rs index 4e18d7142..6f8cdf204 100644 --- a/crates/tor-dirmgr/src/state.rs +++ b/crates/tor-dirmgr/src/state.rs @@ -350,7 +350,7 @@ impl DirState for GetCertsState { let mut changed = false; // Here we iterate over the documents we want, taking them from // our input and remembering them. - for id in self.missing_docs().iter() { + for id in &self.missing_docs() { if let Some(cert) = docs.get(id) { let parsed = AuthCert::parse(cert.as_str()?)?.check_signature()?; let now = current_time(&self.writedir)?; diff --git a/crates/tor-guardmgr/src/sample.rs b/crates/tor-guardmgr/src/sample.rs index 09a304389..8d865bb4d 100644 --- a/crates/tor-guardmgr/src/sample.rs +++ b/crates/tor-guardmgr/src/sample.rs @@ -173,7 +173,7 @@ impl GuardSet { /// Copy non-persistent status from every guard shared with `other`. pub(crate) fn copy_status_from(&mut self, other: &GuardSet) { - for (id, guard) in self.guards.iter_mut() { + for (id, guard) in &mut self.guards { if let Some(other_guard) = other.get(id) { guard.copy_status_from(other_guard); } @@ -438,7 +438,7 @@ impl GuardSet { } // Clear exploratory_circ_pending for all primary guards. - for id in self.primary.iter() { + for id in &self.primary { if let Some(guard) = self.guards.get_mut(id) { guard.note_exploratory_circ(false); } @@ -519,7 +519,7 @@ impl GuardSet { /// Mark every `Unreachable` primary guard as `Unknown`. pub(crate) fn mark_primary_guards_retriable(&mut self) { - for id in self.primary.iter() { + for id in &self.primary { if let Some(g) = self.guards.get_mut(id) { g.mark_retriable(); } @@ -537,7 +537,7 @@ impl GuardSet { /// Mark every `Unreachable` guard as `Unknown`. pub(crate) fn mark_all_guards_retriable(&mut self) { - for (_, g) in self.guards.iter_mut() { + for g in self.guards.values_mut() { g.mark_retriable(); } } @@ -793,7 +793,7 @@ mod test { guards.assert_consistency(); // make sure all the guards are okay. - for (g, guard) in guards.guards.iter() { + for (g, guard) in &guards.guards { let relay = g.get_relay(&netdir).unwrap(); assert!(relay.is_flagged_guard()); assert!(guards.contains_relay(&relay)); @@ -842,7 +842,7 @@ mod test { guards.guards.keys().collect::>(), guards2.guards.keys().collect::>() ); - for (k, g) in guards.guards.iter() { + for (k, g) in &guards.guards { let g2 = guards2.guards.get(k).unwrap(); assert_eq!(format!("{:?}", g), format!("{:?}", g2)); } diff --git a/crates/tor-netdir/src/lib.rs b/crates/tor-netdir/src/lib.rs index 08a240db3..11f11aa14 100644 --- a/crates/tor-netdir/src/lib.rs +++ b/crates/tor-netdir/src/lib.rs @@ -410,7 +410,7 @@ impl PartialNetDir { /// netdir, using the microdescriptors from the previous netdir. pub fn fill_from_previous_netdir<'a>(&mut self, prev: &'a NetDir) -> Vec<&'a MdDigest> { let mut loaded = Vec::new(); - for ent in prev.mds.iter() { + for ent in &prev.mds { if let MdEntry::Present { md, .. } = ent { if self.netdir.mds.contains(md.digest()) { loaded.push(md.digest()); @@ -1054,7 +1054,7 @@ mod test { let missing: HashSet<_> = dir.missing_microdescs().collect(); assert_eq!(missing.len(), 40); assert_eq!(missing.len(), dir.netdir.consensus.relays().len()); - for md in microdescs.iter() { + for md in µdescs { assert!(missing.contains(md.digest())); } diff --git a/crates/tor-netdoc/src/doc/netstatus.rs b/crates/tor-netdoc/src/doc/netstatus.rs index 7615fc325..f5fafa7d6 100644 --- a/crates/tor-netdoc/src/doc/netstatus.rs +++ b/crates/tor-netdoc/src/doc/netstatus.rs @@ -1463,7 +1463,7 @@ impl SignatureGroup { fn list_missing(&self, certs: &[AuthCert]) -> (usize, Vec<&Signature>) { let mut ok: HashSet = HashSet::new(); let mut missing = Vec::new(); - for sig in self.signatures.iter() { + for sig in &self.signatures { let id_fingerprint = &sig.key_ids.id_fingerprint; if ok.contains(id_fingerprint) { continue; @@ -1483,7 +1483,7 @@ impl SignatureGroup { /// authorities. fn could_validate(&self, authorities: &[&RsaIdentity]) -> bool { let mut signed_by: HashSet = HashSet::new(); - for sig in self.signatures.iter() { + for sig in &self.signatures { let id_fp = &sig.key_ids.id_fingerprint; if signed_by.contains(id_fp) { // Already found this in the list. @@ -1509,7 +1509,7 @@ impl SignatureGroup { // than one certificate for a single authority. let mut ok: HashSet = HashSet::new(); - for sig in self.signatures.iter() { + for sig in &self.signatures { let id_fingerprint = &sig.key_ids.id_fingerprint; if ok.contains(id_fingerprint) { // We already checked at least one signature using this diff --git a/crates/tor-netdoc/src/types/policy/portpolicy.rs b/crates/tor-netdoc/src/types/policy/portpolicy.rs index ac4a39fbd..a250e85a3 100644 --- a/crates/tor-netdoc/src/types/policy/portpolicy.rs +++ b/crates/tor-netdoc/src/types/policy/portpolicy.rs @@ -46,7 +46,7 @@ impl Display for PortPolicy { } else { write!(f, "accept ")?; let mut comma = ""; - for range in self.allowed.iter() { + for range in &self.allowed { write!(f, "{}{}", comma, range)?; comma = ","; } @@ -66,7 +66,7 @@ impl PortPolicy { fn invert(&mut self) { let mut prev_hi = 0; let mut new_allowed = Vec::new(); - for entry in self.allowed.iter() { + for entry in &self.allowed { // ports prev_hi+1 through entry.lo-1 were rejected. We should // make them allowed. if entry.lo > prev_hi + 1 { diff --git a/crates/tor-protover/src/lib.rs b/crates/tor-protover/src/lib.rs index e77cc11ac..866472ad0 100644 --- a/crates/tor-protover/src/lib.rs +++ b/crates/tor-protover/src/lib.rs @@ -477,7 +477,7 @@ impl std::fmt::Display for Protocols { entries.push(format!("{}={}", pk, dumpmask(*mask))) } } - for ent in self.unrecognized.iter() { + for ent in &self.unrecognized { if ent.supported != 0 { entries.push(format!( "{}={}",