diff --git a/examples/repl/cmdline.rs b/examples/repl/cmdline.rs index 838e5ffc0..df86235d1 100644 --- a/examples/repl/cmdline.rs +++ b/examples/repl/cmdline.rs @@ -269,7 +269,6 @@ async fn log_msglist(context: &Context, msglist: &[MsgId]) -> Result<()> { async fn log_contactlist(context: &Context, contacts: &[u32]) -> Result<()> { for contact_id in contacts { - let line; let mut line2 = "".to_string(); let contact = Contact::get_by_id(context, *contact_id).await?; let name = contact.get_display_name(); @@ -284,21 +283,17 @@ async fn log_contactlist(context: &Context, contacts: &[u32]) -> Result<()> { } else { "" }; - line = format!( + let line = format!( "{}{} <{}>", if !name.is_empty() { - &name + name } else { "" }, verified_str, - if !addr.is_empty() { - &addr - } else { - "addr unset" - } + if !addr.is_empty() { addr } else { "addr unset" } ); - let peerstate = Peerstate::from_addr(context, &addr) + let peerstate = Peerstate::from_addr(context, addr) .await .expect("peerstate error"); if peerstate.is_some() && *contact_id != 1 { @@ -771,7 +766,7 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu chat::set_chat_name( &context, sel_chat.as_ref().unwrap().get_id(), - &format!("{} {}", arg1, arg2).trim(), + format!("{} {}", arg1, arg2).trim(), ) .await?; diff --git a/examples/repl/main.rs b/examples/repl/main.rs index dc5aa6943..d2693a903 100644 --- a/examples/repl/main.rs +++ b/examples/repl/main.rs @@ -416,7 +416,7 @@ async fn handle_cmd( } "getqr" | "getbadqr" => { ctx.start_io().await; - let group = arg1.parse::().ok().map(|id| ChatId::new(id)); + let group = arg1.parse::().ok().map(ChatId::new); let mut qr = dc_get_securejoin_qr(&ctx, group).await?; if !qr.is_empty() { if arg0 == "getbadqr" && qr.len() > 40 { @@ -433,7 +433,7 @@ async fn handle_cmd( } "getqrsvg" => { ctx.start_io().await; - let group = arg1.parse::().ok().map(|id| ChatId::new(id)); + let group = arg1.parse::().ok().map(ChatId::new); let file = dirs::home_dir().unwrap_or_default().join("qr.svg"); match get_securejoin_qr_svg(&ctx, group).await { Ok(svg) => { diff --git a/src/blob.rs b/src/blob.rs index 3ba92b73a..1770af2a6 100644 --- a/src/blob.rs +++ b/src/blob.rs @@ -292,7 +292,7 @@ impl<'a> BlobObject<'a> { /// Returns the filename of the blob. pub fn as_file_name(&self) -> &str { - self.name.rsplitn(2, '/').next().unwrap() + self.name.rsplit('/').next().unwrap() } /// The path relative in the blob directory. @@ -305,7 +305,7 @@ impl<'a> BlobObject<'a> { /// If a blob's filename has an extension, it is always guaranteed /// to be lowercase. pub fn suffix(&self) -> Option<&str> { - let ext = self.name.rsplitn(2, '.').next(); + let ext = self.name.rsplit('.').next(); if ext == Some(&self.name) { None } else { diff --git a/src/chat.rs b/src/chat.rs index a32f4c923..dd35e82ee 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1160,7 +1160,7 @@ impl Chat { /// deltachat, and the data returned is still subject to change. pub async fn get_info(&self, context: &Context) -> Result { let draft = match self.id.get_draft(context).await? { - Some(message) => message.text.unwrap_or_else(String::new), + Some(message) => message.text.unwrap_or_default(), _ => String::new(), }; Ok(ChatInfo { diff --git a/src/contact.rs b/src/contact.rs index aae6d8bc0..651283cca 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1179,7 +1179,7 @@ async fn set_block_contact(context: &Context, contact_id: u32, new_blocking: boo .sql .execute( "UPDATE contacts SET blocked=? WHERE id=?;", - paramsv![new_blocking as i32, contact_id as i32], + paramsv![i32::from(new_blocking), contact_id as i32], ) .await?; diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 79bb4c407..b7482b0e2 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1372,7 +1372,7 @@ async fn is_probably_private_reply( // should be assigned to the group chat. We restrict this exception to classical emails, as chat-group-messages // contain a Chat-Group-Id header and can be sorted into the correct chat this way. - let private_message = to_ids == [DC_CONTACT_ID_SELF].iter().copied().collect::>(); + let private_message = to_ids == [DC_CONTACT_ID_SELF]; if !private_message { return Ok(false); } @@ -1406,7 +1406,7 @@ async fn create_or_lookup_group( let grpid = if let Some(grpid) = try_getting_grpid(mime_parser) { grpid } else if allow_creation { - let mut member_ids: Vec = to_ids.iter().copied().collect(); + let mut member_ids: Vec = to_ids.to_vec(); if !member_ids.contains(&(from_id as u32)) { member_ids.push(from_id as u32); } diff --git a/src/dc_tools.rs b/src/dc_tools.rs index 46da3189e..0b61a4523 100644 --- a/src/dc_tools.rs +++ b/src/dc_tools.rs @@ -534,8 +534,8 @@ impl rusqlite::types::ToSql for EmailAddress { /// Makes sure that a user input that is not supposed to contain newlines does not contain newlines. pub(crate) fn improve_single_line_input(input: &str) -> String { input - .replace("\n", " ") - .replace("\r", " ") + .replace('\n', " ") + .replace('\r', " ") .trim() .to_string() } diff --git a/src/html.rs b/src/html.rs index 4ec781201..a7d0e5191 100644 --- a/src/html.rs +++ b/src/html.rs @@ -365,7 +365,7 @@ test some special html-characters as < > and & but also " and &#x // however, rust multiline-strings use just `\n`; // therefore, we just remove `\r` before comparison. assert_eq!( - parser.html.replace("\r", ""), + parser.html.replace('\r', ""), r##"

mime-modified set; simplify is always regarded as lossy.

@@ -379,7 +379,7 @@ test some special html-characters as < > and & but also " and &#x let raw = include_bytes!("../test-data/message/text_alt_html.eml"); let parser = HtmlMsgParser::from_bytes(&t.ctx, raw).await.unwrap(); assert_eq!( - parser.html.replace("\r", ""), // see comment in test_htmlparse_html() + parser.html.replace('\r', ""), // see comment in test_htmlparse_html() r##"

mime-modified set; simplify is always regarded as lossy.

@@ -394,7 +394,7 @@ test some special html-characters as < > and & but also " and &#x let raw = include_bytes!("../test-data/message/text_alt_plain_html.eml"); let parser = HtmlMsgParser::from_bytes(&t.ctx, raw).await.unwrap(); assert_eq!( - parser.html.replace("\r", ""), // see comment in test_htmlparse_html() + parser.html.replace('\r', ""), // see comment in test_htmlparse_html() r##"

this is html diff --git a/src/imex.rs b/src/imex.rs index 9423c84a9..95920b769 100644 --- a/src/imex.rs +++ b/src/imex.rs @@ -165,7 +165,6 @@ pub async fn initiate_key_transfer(context: &Context) -> Result { } async fn do_initiate_key_transfer(context: &Context) -> Result { - let mut msg: Message; let setup_code = create_setup_code(context); /* this may require a keypair to be created. this may take a second ... */ let setup_file_content = render_setup_file(context, &setup_code).await?; @@ -178,8 +177,10 @@ async fn do_initiate_key_transfer(context: &Context) -> Result { .await?; let chat_id = ChatId::create_for_contact(context, DC_CONTACT_ID_SELF).await?; - msg = Message::default(); - msg.viewtype = Viewtype::File; + let mut msg = Message { + viewtype: Viewtype::File, + ..Default::default() + }; msg.param.set(Param::File, setup_file_blob.as_name()); msg.subject = stock_str::ac_setup_msg_subject(context).await; msg.param @@ -236,7 +237,7 @@ pub async fn render_setup_file(context: &Context, passphrase: &str) -> Result"); + let msg_body_html = msg_body.replace('\r', "").replace('\n', "
"); Ok(format!( concat!( "\r\n", diff --git a/src/key.rs b/src/key.rs index 5d1276b63..688030fc3 100644 --- a/src/key.rs +++ b/src/key.rs @@ -297,8 +297,8 @@ pub async fn store_self_keypair( .context("failed to clear default")?; } let is_default = match default { - KeyPairUse::Default => true as i32, - KeyPairUse::ReadOnly => false as i32, + KeyPairUse::Default => i32::from(true), + KeyPairUse::ReadOnly => i32::from(false), }; let addr = keypair.addr.to_string(); diff --git a/src/location.rs b/src/location.rs index bebd0c5ea..6f1505a78 100644 --- a/src/location.rs +++ b/src/location.rs @@ -101,10 +101,10 @@ impl Kml { let val = event.unescape_and_decode(reader).unwrap_or_default(); let val = val - .replace("\n", "") - .replace("\r", "") - .replace("\t", "") - .replace(" ", ""); + .replace('\n', "") + .replace('\r', "") + .replace('\t', "") + .replace(' ', ""); if self.tag.contains(KmlTag::WHEN) && val.len() >= 19 { // YYYY-MM-DDTHH:MM:SSZ diff --git a/src/peerstate.rs b/src/peerstate.rs index 7df1460ac..2dbc9a228 100644 --- a/src/peerstate.rs +++ b/src/peerstate.rs @@ -379,10 +379,9 @@ impl Peerstate { pub fn peek_key(&self, min_verified: PeerstateVerifiedStatus) -> Option<&SignedPublicKey> { match min_verified { PeerstateVerifiedStatus::BidirectVerified => self.verified_key.as_ref(), - PeerstateVerifiedStatus::Unverified => self - .public_key - .as_ref() - .or_else(|| self.gossip_key.as_ref()), + PeerstateVerifiedStatus::Unverified => { + self.public_key.as_ref().or(self.gossip_key.as_ref()) + } } } diff --git a/src/plaintext.rs b/src/plaintext.rs index 9b49a5483..0f1082ea5 100644 --- a/src/plaintext.rs +++ b/src/plaintext.rs @@ -41,7 +41,7 @@ impl PlainText { // as cannot be handled correctly // (they would become <http://example.org> where the trailing > would become a valid url part). // to avoid double encoding, we escape our html-entities by \r that must not be used in the string elsewhere. - let line = line.to_string().replace("\r", ""); + let line = line.to_string().replace('\r', ""); let mut line = LINKIFY_MAIL_RE .replace_all(&*line, "\rLTa href=\rQUOTmailto:$1\rQUOT\rGT$1\rLT/a\rGT") diff --git a/src/provider.rs b/src/provider.rs index 13dafd1bd..bdba76a65 100644 --- a/src/provider.rs +++ b/src/provider.rs @@ -113,7 +113,7 @@ pub async fn get_provider_info( domain: &str, skip_mx: bool, ) -> Option<&'static Provider> { - let domain = domain.rsplitn(2, '@').next()?; + let domain = domain.rsplit('@').next()?; if let Some(provider) = get_provider_by_domain(domain) { return Some(provider); diff --git a/src/qr.rs b/src/qr.rs index 9e91a2ecd..a0e669b26 100644 --- a/src/qr.rs +++ b/src/qr.rs @@ -173,7 +173,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result { }; let name = if let Some(encoded_name) = param.get("n") { - let encoded_name = encoded_name.replace("+", "%20"); // sometimes spaces are encoded as `+` + let encoded_name = encoded_name.replace('+', "%20"); // sometimes spaces are encoded as `+` match percent_decode_str(&encoded_name).decode_utf8() { Ok(name) => name.to_string(), Err(err) => bail!("Invalid name: {}", err), @@ -188,7 +188,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result { let grpname = if grpid.is_some() { if let Some(encoded_name) = param.get("g") { - let encoded_name = encoded_name.replace("+", "%20"); // sometimes spaces are encoded as `+` + let encoded_name = encoded_name.replace('+', "%20"); // sometimes spaces are encoded as `+` match percent_decode_str(&encoded_name).decode_utf8() { Ok(name) => Some(name.to_string()), Err(err) => bail!("Invalid group name: {}", err), diff --git a/src/simplify.rs b/src/simplify.rs index 06f6bc37d..74d2dcfde 100644 --- a/src/simplify.rs +++ b/src/simplify.rs @@ -240,7 +240,7 @@ fn render_message(lines: &[&str], is_cut_at_end: bool) -> String { ret += " [...]"; } // redo escaping done by escape_message_footer_marks() - ret.replace("\u{200B}", "") + ret.replace('\u{200B}', "") } /// Returns true if the line contains only whitespace. diff --git a/src/smtp.rs b/src/smtp.rs index 7537c7400..45a03106d 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -246,7 +246,7 @@ pub(crate) async fn smtp_send( // Other enhanced status codes, such as Postfix // "550 5.1.1 : Recipient address rejected: User unknown in local recipient table" // are not ignored. - response.first_word() == Some(&"5.5.0".to_string()) + response.first_word() == Some("5.5.0") } _ => false, };