From 5e306130fb10e55a05985475b6e4f3a83903cf6f Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sun, 3 Mar 2019 22:11:15 +0200 Subject: [PATCH] Fix clippy warnings --- melib/src/addressbook.rs | 8 +- melib/src/mailbox/backends.rs | 8 +- melib/src/mailbox/backends/maildir.rs | 6 +- melib/src/mailbox/backends/maildir/backend.rs | 2 +- melib/src/mailbox/email.rs | 26 ++--- melib/src/mailbox/email/compose.rs | 2 +- melib/src/mailbox/email/compose/mime.rs | 2 +- melib/src/mailbox/email/parser.rs | 10 +- melib/src/mailbox/thread.rs | 16 ++- ui/src/components/contacts.rs | 16 +-- ui/src/components/mail/accounts.rs | 4 - ui/src/components/mail/accounts/contacts.rs | 105 ------------------ ui/src/components/mail/compose.rs | 73 +----------- ui/src/components/mail/listing/compact.rs | 2 +- ui/src/components/utilities.rs | 4 +- ui/src/components/utilities/widgets.rs | 21 ++-- ui/src/types/keys.rs | 2 +- 17 files changed, 67 insertions(+), 240 deletions(-) delete mode 100644 ui/src/components/mail/accounts/contacts.rs diff --git a/melib/src/addressbook.rs b/melib/src/addressbook.rs index 86022008..b0920ebb 100644 --- a/melib/src/addressbook.rs +++ b/melib/src/addressbook.rs @@ -146,7 +146,7 @@ impl Card { self.id = new; } pub fn set_title(&mut self, new: &str) { - self.title = new.to_string();() + self.title = new.to_string(); } pub fn set_firstname(&mut self, new: &str) { self.firstname = new.to_string(); @@ -217,3 +217,9 @@ impl From> for Card { card } } + +impl Default for Card { + fn default() -> Self { + Self::new() + } +} diff --git a/melib/src/mailbox/backends.rs b/melib/src/mailbox/backends.rs index b401da34..ca5aa23b 100644 --- a/melib/src/mailbox/backends.rs +++ b/melib/src/mailbox/backends.rs @@ -72,7 +72,7 @@ impl Backends { self.map[key]() } - pub fn register(&mut self, key: String, backend: Box BackendCreator>) -> () { + pub fn register(&mut self, key: String, backend: Box BackendCreator>) { if self.map.contains_key(&key) { panic!("{} is an already registered backend", key); } @@ -116,7 +116,7 @@ impl RefreshEventConsumer { pub fn new(b: Box ()>) -> Self { RefreshEventConsumer(b) } - pub fn send(&self, r: RefreshEvent) -> () { + pub fn send(&self, r: RefreshEvent) { self.0(r); } } @@ -141,7 +141,7 @@ impl NotifyFn { pub fn new(b: Box ()>) -> Self { NotifyFn(b) } - pub fn notify(&self) -> () { + pub fn notify(&self) { self.0(); } } @@ -203,7 +203,7 @@ pub trait BackendOp: ::std::fmt::Debug + ::std::marker::Send { fn fetch_headers(&mut self) -> Result<&[u8]>; fn fetch_body(&mut self) -> Result<&[u8]>; fn fetch_flags(&self) -> Flag; - fn set_flag(&mut self, &mut Envelope, &Flag) -> Result<()>; + fn set_flag(&mut self, &mut Envelope, Flag) -> Result<()>; } /// `BackendOpGenerator` is a wrapper for a closure that returns a `BackendOp` object diff --git a/melib/src/mailbox/backends/maildir.rs b/melib/src/mailbox/backends/maildir.rs index f240b4d8..676584aa 100644 --- a/melib/src/mailbox/backends/maildir.rs +++ b/melib/src/mailbox/backends/maildir.rs @@ -123,7 +123,7 @@ impl<'a> BackendOp for MaildirOp { flag } - fn set_flag(&mut self, envelope: &mut Envelope, f: &Flag) -> Result<()> { + fn set_flag(&mut self, envelope: &mut Envelope, f: Flag) -> Result<()> { let path = self.path(); let path = path.to_str().unwrap(); // Assume UTF-8 validity let idx: usize = path @@ -132,10 +132,10 @@ impl<'a> BackendOp for MaildirOp { + 3; let mut new_name: String = path[..idx].to_string(); let mut flags = self.fetch_flags(); - if !(flags & *f).is_empty() { + if !(flags & f).is_empty() { return Ok(()); } - flags.toggle(*f); + flags.toggle(f); if !(flags & Flag::DRAFT).is_empty() { new_name.push('D'); } diff --git a/melib/src/mailbox/backends/maildir/backend.rs b/melib/src/mailbox/backends/maildir/backend.rs index abb8f243..afb5d06f 100644 --- a/melib/src/mailbox/backends/maildir/backend.rs +++ b/melib/src/mailbox/backends/maildir/backend.rs @@ -342,7 +342,7 @@ impl MailBackend for MaildirType { eprintln!("saving at {}", path.display()); let file = fs::File::create(path)?; let mut writer = io::BufWriter::new(file); - writer.write(&message.into_bytes())?; + writer.write_all(&message.into_bytes())?; return Ok(()); } } diff --git a/melib/src/mailbox/email.rs b/melib/src/mailbox/email.rs index 290b23e6..8cc16fec 100644 --- a/melib/src/mailbox/email.rs +++ b/melib/src/mailbox/email.rs @@ -616,22 +616,22 @@ impl Envelope { pub fn message_id_raw(&self) -> Cow { String::from_utf8_lossy(self.message_id.raw()) } - fn set_date(&mut self, new_val: &[u8]) -> () { + fn set_date(&mut self, new_val: &[u8]) { self.date = String::from_utf8_lossy(new_val).into_owned(); } - fn set_bcc(&mut self, new_val: Vec
) -> () { + fn set_bcc(&mut self, new_val: Vec
) { self.bcc = new_val; } - fn set_cc(&mut self, new_val: Vec
) -> () { + fn set_cc(&mut self, new_val: Vec
) { self.cc = new_val; } - fn set_from(&mut self, new_val: Vec
) -> () { + fn set_from(&mut self, new_val: Vec
) { self.from = new_val; } - fn set_to(&mut self, new_val: Vec
) -> () { + fn set_to(&mut self, new_val: Vec
) { self.to = new_val; } - fn set_in_reply_to(&mut self, new_val: &[u8]) -> () { + fn set_in_reply_to(&mut self, new_val: &[u8]) { let slice = match parser::message_id(new_val).to_full_result() { Ok(v) => v, Err(_) => { @@ -641,10 +641,10 @@ impl Envelope { }; self.in_reply_to = Some(MessageID::new(new_val, slice)); } - fn set_subject(&mut self, new_val: Vec) -> () { + fn set_subject(&mut self, new_val: Vec) { self.subject = Some(new_val); } - fn set_message_id(&mut self, new_val: &[u8]) -> () { + fn set_message_id(&mut self, new_val: &[u8]) { let slice = match parser::message_id(new_val).to_full_result() { Ok(v) => v, Err(_) => { @@ -653,7 +653,7 @@ impl Envelope { }; self.message_id = MessageID::new(new_val, slice); } - fn push_references(&mut self, new_val: &[u8]) -> () { + fn push_references(&mut self, new_val: &[u8]) { let slice = match parser::message_id(new_val).to_full_result() { Ok(v) => v, Err(_) => { @@ -685,7 +685,7 @@ impl Envelope { } } } - fn set_references(&mut self, new_val: &[u8]) -> () { + fn set_references(&mut self, new_val: &[u8]) { match self.references { Some(ref mut s) => { s.raw = new_val.into(); @@ -713,14 +713,14 @@ impl Envelope { pub fn thread(&self) -> usize { self.thread } - pub fn set_thread(&mut self, new_val: usize) -> () { + pub fn set_thread(&mut self, new_val: usize) { self.thread = new_val; } - pub fn set_datetime(&mut self, new_val: chrono::DateTime) -> () { + pub fn set_datetime(&mut self, new_val: chrono::DateTime) { self.timestamp = new_val.timestamp() as UnixTimestamp; } pub fn set_flag(&mut self, f: Flag, mut operation: Box) -> Result<()> { - operation.set_flag(self, &f)?; + operation.set_flag(self, f)?; self.flags |= f; Ok(()) } diff --git a/melib/src/mailbox/email/compose.rs b/melib/src/mailbox/email/compose.rs index d5cea96b..e027cf7f 100644 --- a/melib/src/mailbox/email/compose.rs +++ b/melib/src/mailbox/email/compose.rs @@ -6,7 +6,7 @@ use std::str; mod random; mod mime; -use self::mime::*; +//use self::mime::*; use super::parser; diff --git a/melib/src/mailbox/email/compose/mime.rs b/melib/src/mailbox/email/compose/mime.rs index 4563e55b..8252c34d 100644 --- a/melib/src/mailbox/email/compose/mime.rs +++ b/melib/src/mailbox/email/compose/mime.rs @@ -1 +1 @@ -use super::*; +//use super::*; diff --git a/melib/src/mailbox/email/parser.rs b/melib/src/mailbox/email/parser.rs index e08349e8..5b0e0b75 100644 --- a/melib/src/mailbox/email/parser.rs +++ b/melib/src/mailbox/email/parser.rs @@ -48,7 +48,7 @@ pub trait BytesExt { impl BytesExt for [u8] { fn rtrim(&self) -> &Self { if let Some(last) = self.iter().rposition(|b| !is_whitespace!(*b)) { - &self[..last + 1] + &self[..=last] } else { &[] } @@ -155,7 +155,7 @@ pub fn headers_raw(input: &[u8]) -> IResult<&[u8], &[u8]> { } for (i, x) in input.iter().enumerate() { if *x == b'\n' && i + 1 < input.len() && input[i + 1] == b'\n' { - return IResult::Done(&input[(i + 1)..], &input[0..i + 1]); + return IResult::Done(&input[(i + 1)..], &input[0..=i]); } } IResult::Error(error_code!(ErrorKind::Custom(43))) @@ -383,14 +383,14 @@ fn addr_spec(input: &[u8]) -> IResult<&[u8], Address> { IResult::Done( &input[end..], Address::Mailbox(MailboxAddress { - raw: input[0..end + 1].into(), + raw: input[0..=end].into(), display_name: StrBuilder { offset: 0, length: 0, }, address_spec: StrBuilder { offset: 0, - length: input[0..end + 1].len(), + length: input[0..=end].len(), }, }), ) @@ -517,7 +517,7 @@ fn message_id_peek(input: &[u8]) -> IResult<&[u8], &[u8]> { } else { for (i, &x) in input.iter().take(input_length).enumerate().skip(1) { if x == b'>' { - return IResult::Done(&input[i + 1..], &input[0..i + 1]); + return IResult::Done(&input[i + 1..], &input[0..=i]); } } IResult::Incomplete(Needed::Unknown) diff --git a/melib/src/mailbox/thread.rs b/melib/src/mailbox/thread.rs index 9b6baf0a..0d72d6df 100644 --- a/melib/src/mailbox/thread.rs +++ b/melib/src/mailbox/thread.rs @@ -512,16 +512,14 @@ impl Threads { remove_from_parent!(thread_nodes, idx); remove_from_parent!(thread_nodes, child); return true; // Pruned - } else { - if let Some(p) = thread_nodes[idx].parent { - let orphans = thread_nodes[idx].children.clone(); - for c in orphans { - make!((p) parent of (c), thread_nodes); - } - remove_from_parent!(thread_nodes, idx); - thread_nodes[idx].children.clear(); - return true; // Pruned + } else if let Some(p) = thread_nodes[idx].parent { + let orphans = thread_nodes[idx].children.clone(); + for c in orphans { + make!((p) parent of (c), thread_nodes); } + remove_from_parent!(thread_nodes, idx); + thread_nodes[idx].children.clear(); + return true; // Pruned } } diff --git a/ui/src/components/contacts.rs b/ui/src/components/contacts.rs index 8c0ae1fd..8488a80f 100644 --- a/ui/src/components/contacts.rs +++ b/ui/src/components/contacts.rs @@ -28,10 +28,10 @@ pub use self::contact_list::*; #[derive(Debug)] enum ViewMode { - ReadOnly, + //ReadOnly, Read, - Edit, - New, + //Edit, + //New, } #[derive(Debug)] @@ -69,9 +69,9 @@ impl fmt::Display for ContactManager { impl ContactManager { fn initialize(&mut self) { - let (width, height) = self.content.size(); + let (width, _) = self.content.size(); - let (x, y) = write_string_to_grid( + let (x, _) = write_string_to_grid( "Contact Name ", &mut self.content, Color::Byte(33), @@ -79,7 +79,7 @@ impl ContactManager { ((0, 0), (width, 0)), false, ); - let (x, y) = write_string_to_grid( + let (x, _) = write_string_to_grid( "Last edited: ", &mut self.content, Color::Byte(250), @@ -87,7 +87,7 @@ impl ContactManager { ((x, 0), (width, 0)), false, ); - let (x, y) = write_string_to_grid( + write_string_to_grid( &self.card.last_edited(), &mut self.content, Color::Byte(250), @@ -115,7 +115,7 @@ impl Component for ContactManager { self.initialized = true; } clear_area(grid, area); - let (width, height) = self.content.size(); + let (width, _height) = self.content.size(); copy_area(grid, &self.content, area, ((0, 0), (width - 1, 0))); let upper_left = upper_left!(area); diff --git a/ui/src/components/mail/accounts.rs b/ui/src/components/mail/accounts.rs index 56c71095..8fdc620b 100644 --- a/ui/src/components/mail/accounts.rs +++ b/ui/src/components/mail/accounts.rs @@ -19,10 +19,6 @@ * along with meli. If not, see . */ -mod contacts; - -pub use contacts::*; - use super::*; use std::fmt; diff --git a/ui/src/components/mail/accounts/contacts.rs b/ui/src/components/mail/accounts/contacts.rs deleted file mode 100644 index 61b8cbaa..00000000 --- a/ui/src/components/mail/accounts/contacts.rs +++ /dev/null @@ -1,105 +0,0 @@ -/* - * meli - ui crate. - * - * Copyright 2019 Manos Pitsidianakis - * - * This file is part of meli. - * - * meli is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * meli is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with meli. If not, see . - */ - -use super::*; - -#[derive(Debug)] -pub struct ContactsPanel { - content: CellBuffer, - dirty: bool, -} - -impl fmt::Display for ContactsPanel { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "contacts") - } -} - - -impl Component for ContactsPanel { - fn draw(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) { - if self.dirty { - self.dirty = false; - } - clear_area(grid, area); - - let (width, height) = self.content.size(); - copy_area(grid, &self.content, area, ((0, 0), (width - 1, height - 1))); - context.dirty_areas.push_back(area); - } - fn process_event(&mut self, _event: &mut UIEvent, _context: &mut Context) -> bool { - false - } - fn is_dirty(&self) -> bool { - self.dirty - } - fn set_dirty(&mut self) { - self.dirty = true; - } -} - -impl ContactsPanel { - pub fn new(context: &Context) -> ContactsPanel { - let mut content = CellBuffer::new(120, 25 + context.accounts.len() * 20, Cell::default()); - write_string_to_grid( - "Contacts", - &mut content, - Color::Default, - Color::Default, - ((2, 3), (120 - 1, 3)), - true, - ); - - for (i, a) in context.accounts.iter().enumerate() { - create_box(&mut content, ((2,5+i*10 ), (120-1, 15+i*10))); - let (x, y) = write_string_to_grid( - a.name(), - &mut content, - Color::Default, - Color::Default, - ((3, 5 + i*10), (120 - 2, 5 + i*10)), - true, - ); - write_string_to_grid( - " ▒██▒ ", - &mut content, - Color::Byte(32), - Color::Default, - ((x, y), (120 - 2, 5 + i*10)), - true, - ); - write_string_to_grid( - &a.runtime_settings.account().identity, - &mut content, - Color::Default, - Color::Default, - ((4, y + 2), (120 - 2, y + 2)), - true, - ); - - } - - ContactsPanel { - content, - dirty: true, - } - } -} diff --git a/ui/src/components/mail/compose.rs b/ui/src/components/mail/compose.rs index 3137df32..00d2493e 100644 --- a/ui/src/components/mail/compose.rs +++ b/ui/src/components/mail/compose.rs @@ -29,7 +29,7 @@ use std::str::FromStr; enum Cursor { Headers, Body, - Attachments, + //Attachments, } #[derive(Debug)] @@ -71,7 +71,7 @@ impl Default for Composer { enum ViewMode { Discard(Uuid), Pager, - Selector(Selector), + //Selector(Selector), Overview, } @@ -99,14 +99,6 @@ impl ViewMode { false } } - - fn is_selector(&self) -> bool { - if let ViewMode::Selector(_) = self { - true - } else { - false - } - } } impl fmt::Display for Composer { @@ -183,34 +175,7 @@ impl Composer { } } - fn draw_header_table(&mut self, grid: &mut CellBuffer, area: Area) { - let upper_left = upper_left!(area); - let bottom_right = bottom_right!(area); - - let headers = self.draft.headers(); - { - let (mut x, mut y) = upper_left; - for &k in &["Date", "From", "To", "Cc", "Bcc", "Subject"] { - let bg_color = Color::Default; - - - let update = { - let (x, y) = write_string_to_grid( - k, - grid, - Color::Default, - bg_color, - ((x, y), set_y(bottom_right, y)), - true, - ); - let (x, y) = write_string_to_grid( - ": ", - grid, - Color::Default, - bg_color, - ((x, y), set_y(bottom_right, y)), - true, - ); + /* let (x, y) = if k == "From" { write_string_to_grid( "◀ ", @@ -240,15 +205,7 @@ impl Composer { ((x, y), set_y(bottom_right, y)), true, ) - } else { - (x, y) - } - }; - x = get_x(upper_left); - y = update.1 + 1; - } - } - } + */ } impl Component for Composer { @@ -341,9 +298,6 @@ impl Component for Composer { ViewMode::Overview | ViewMode::Pager => { self.pager.draw(grid, body_area, context); }, - ViewMode::Selector(ref mut s) => { - s.draw(grid, body_area, context); - }, ViewMode::Discard(_) => { /* Let user choose whether to quit with/without saving or cancel */ let mid_x = width!(area) / 2; @@ -421,12 +375,6 @@ impl Component for Composer { return true; } }, - (ViewMode::Selector(ref mut s), _) => { - if s.process_event(event, context) { - self.dirty = true; - return true; - } - }, _ => {} } if self.form.process_event(event, context) { @@ -434,19 +382,6 @@ impl Component for Composer { } match event.event_type { - UIEventType::Input(Key::Esc) if self.mode.is_selector() => { - self.mode = ViewMode::Overview; - return true; - }, - UIEventType::Input(Key::Char('\n')) if self.mode.is_selector() => { - let mut old_mode = std::mem::replace(&mut self.mode, ViewMode::Overview); - if let ViewMode::Selector(s) = old_mode { - eprintln!("collected {:?}", s.collect()); - } else { - unreachable!() - } - return true; - }, UIEventType::Resize => { self.set_dirty(); }, diff --git a/ui/src/components/mail/listing/compact.rs b/ui/src/components/mail/listing/compact.rs index e39f27d6..2af9d6e8 100644 --- a/ui/src/components/mail/listing/compact.rs +++ b/ui/src/components/mail/listing/compact.rs @@ -525,7 +525,7 @@ impl Component for CompactListing { } fn get_shortcuts(&self) -> ShortcutMap { - let mut map = self.view.as_ref().map(|p| p.get_shortcuts()).unwrap_or(ShortcutMap::default()); + let mut map = self.view.as_ref().map(|p| p.get_shortcuts()).unwrap_or_default(); map.insert(Key::Char('\n'), "Open thread.".into()); map.insert(Key::PageUp, "Go to previous page.".into()); diff --git a/ui/src/components/utilities.rs b/ui/src/components/utilities.rs index cde01e22..a1a81a0a 100644 --- a/ui/src/components/utilities.rs +++ b/ui/src/components/utilities.rs @@ -397,7 +397,7 @@ impl Component for Pager { } context.dirty_areas.push_back(area); } - fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { + fn process_event(&mut self, event: &mut UIEvent, _context: &mut Context) -> bool { match event.event_type { UIEventType::Input(Key::Char('k')) => { if self.cursor_pos > 0 { @@ -937,7 +937,7 @@ impl Component for Selector { ); context.dirty_areas.push_back(area); } - fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { + fn process_event(&mut self, event: &mut UIEvent, _context: &mut Context) -> bool { let (width, height) = self.content.size(); match event.event_type { UIEventType::Input(Key::Char(' ')) => { diff --git a/ui/src/components/utilities/widgets.rs b/ui/src/components/utilities/widgets.rs index 090885ae..2f522ca6 100644 --- a/ui/src/components/utilities/widgets.rs +++ b/ui/src/components/utilities/widgets.rs @@ -72,7 +72,7 @@ impl Field { }, TextArea(_, _) => { }, - Choice(_, cursor) => { + Choice(_, _cursor) => { } } @@ -80,7 +80,7 @@ impl Field { } impl Component for Field { - fn draw(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) { + fn draw(&mut self, grid: &mut CellBuffer, area: Area, _context: &mut Context) { write_string_to_grid( self.as_str(), grid, @@ -89,7 +89,7 @@ impl Component for Field { area, true); } - fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { + fn process_event(&mut self, event: &mut UIEvent, _context: &mut Context) -> bool { match event.event_type { UIEventType::InsertInput(Key::Right) => { match self { @@ -294,10 +294,8 @@ impl Component for FormWidget { context.dirty_areas.push_back(area); } fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { - if self.focus == FormFocus::Buttons { - if self.buttons.process_event(event, context) { - return true; - } + if self.focus == FormFocus::Buttons && self.buttons.process_event(event, context) { + return true; } match event.event_type { @@ -341,7 +339,7 @@ impl Component for FormWidget { UIEventType::ChangeMode(UIMode::Normal) if self.focus == FormFocus::TextInput => { self.focus = FormFocus::Fields; }, - UIEventType::InsertInput(Key::Char(k)) if self.focus == FormFocus::TextInput => { + UIEventType::InsertInput(Key::Char(_)) if self.focus == FormFocus::TextInput => { let field = self.fields.get_mut(&self.layout[self.cursor]).unwrap(); field.process_event(event, context); }, @@ -402,14 +400,13 @@ impl ButtonWidget where T: std::fmt::Debug + Default + Send { impl Component for ButtonWidget where T: std::fmt::Debug + Default + Send { - fn draw(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) { + fn draw(&mut self, grid: &mut CellBuffer, area: Area, _context: &mut Context) { let upper_left = upper_left!(area); - let bottom_right = bottom_right!(area); let mut len = 0; for (i, k) in self.layout.iter().enumerate() { let cur_len = k.len(); - let (x, y) = write_string_to_grid( + write_string_to_grid( k.as_str(), grid, Color::Default, @@ -420,7 +417,7 @@ impl Component for ButtonWidget where T: std::fmt::Debug + Default + Send len += cur_len + 3; } } - fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { + fn process_event(&mut self, event: &mut UIEvent, _context: &mut Context) -> bool { match event.event_type { UIEventType::Input(Key::Char('\n')) => { self.result = Some(self.buttons.remove(&self.layout[self.cursor]).unwrap_or_default()); diff --git a/ui/src/types/keys.rs b/ui/src/types/keys.rs index 6be97782..e3db0176 100644 --- a/ui/src/types/keys.rs +++ b/ui/src/types/keys.rs @@ -201,7 +201,7 @@ derive_csi_sequence!("End Bracketed Paste Mode", BracketModeEnd, "?2003l"); pub const BRACKET_PASTE_START: &[u8] = b"\x1B[200~"; pub const BRACKET_PASTE_END: &[u8] = b"\x1B[201~"; -const FIELDS: &'static [&'static str] = &[]; +const FIELDS: &[&str] = &[]; impl<'de> Deserialize<'de> for Key {