Chore: implement Clone & Copy common traits (#350)

Implement `Clone & Copy` common traits for most structs in src.

Only implement `Copy` for structs that are simple and trivial to copy.

Reorder the derive fields to be more consistent:

    Debug, Default, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash

see: https://github.com/ratatui-org/ratatui/issues/307
This commit is contained in:
tieway59 2023-07-28 19:04:29 +08:00 committed by GitHub
parent 6f659cfb07
commit 440f62ff54
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 20 additions and 20 deletions

View file

@ -42,7 +42,7 @@ use crate::{
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct CrosstermBackend<W: Write> { pub struct CrosstermBackend<W: Write> {
buffer: W, buffer: W,
} }
@ -213,7 +213,7 @@ impl From<Color> for CColor {
/// The `ModifierDiff` struct is used to calculate the difference between two `Modifier` /// The `ModifierDiff` struct is used to calculate the difference between two `Modifier`
/// values. This is useful when updating the terminal display, as it allows for more /// values. This is useful when updating the terminal display, as it allows for more
/// efficient updates by only sending the necessary changes. /// efficient updates by only sending the necessary changes.
#[derive(Debug, Default)] #[derive(Debug, Default, Clone, Copy)]
struct ModifierDiff { struct ModifierDiff {
pub from: Modifier, pub from: Modifier,
pub to: Modifier, pub to: Modifier,

View file

@ -31,7 +31,7 @@ use crate::{
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct TermionBackend<W> pub struct TermionBackend<W>
where where
W: Write, W: Write,
@ -164,16 +164,16 @@ where
self.stdout.flush() self.stdout.flush()
} }
} }
#[derive(Debug, Default)] #[derive(Debug, Default, Clone, Copy)]
struct Fg(Color); struct Fg(Color);
#[derive(Debug, Default)] #[derive(Debug, Default, Clone, Copy)]
struct Bg(Color); struct Bg(Color);
/// The `ModifierDiff` struct is used to calculate the difference between two `Modifier` /// The `ModifierDiff` struct is used to calculate the difference between two `Modifier`
/// values. This is useful when updating the terminal display, as it allows for more /// values. This is useful when updating the terminal display, as it allows for more
/// efficient updates by only sending the necessary changes. /// efficient updates by only sending the necessary changes.
#[derive(Debug, Default)] #[derive(Debug, Default, Clone, Copy)]
struct ModifierDiff { struct ModifierDiff {
from: Modifier, from: Modifier,
to: Modifier, to: Modifier,

View file

@ -28,7 +28,7 @@ use crate::{
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct TestBackend { pub struct TestBackend {
width: u16, width: u16,
buffer: Buffer, buffer: Buffer,

View file

@ -20,7 +20,7 @@ pub enum Corner {
BottomLeft, BottomLeft,
} }
#[derive(Debug, Default, Hash, Clone, Eq, PartialEq)] #[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
pub enum Direction { pub enum Direction {
Horizontal, Horizontal,
#[default] #[default]
@ -64,7 +64,7 @@ impl Constraint {
} }
} }
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)]
pub struct Margin { pub struct Margin {
pub vertical: u16, pub vertical: u16,
pub horizontal: u16, pub horizontal: u16,
@ -368,7 +368,7 @@ fn split(area: Rect, layout: &Layout) -> Rc<[Rect]> {
} }
/// A container used by the solver inside split /// A container used by the solver inside split
#[derive(Debug)] #[derive(Debug, Clone, Copy)]
struct Element { struct Element {
x: Variable, x: Variable,
y: Variable, y: Variable,

View file

@ -23,7 +23,7 @@ pub struct TerminalOptions {
} }
/// Interface to the terminal backed by Termion /// Interface to the terminal backed by Termion
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct Terminal<B> pub struct Terminal<B>
where where
B: Backend, B: Backend,
@ -139,7 +139,7 @@ where
/// `CompletedFrame` represents the state of the terminal after all changes performed in the last /// `CompletedFrame` represents the state of the terminal after all changes performed in the last
/// [`Terminal::draw`] call have been applied. Therefore, it is only valid until the next call to /// [`Terminal::draw`] call have been applied. Therefore, it is only valid until the next call to
/// [`Terminal::draw`]. /// [`Terminal::draw`].
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct CompletedFrame<'a> { pub struct CompletedFrame<'a> {
pub buffer: &'a Buffer, pub buffer: &'a Buffer,
pub area: Rect, pub area: Rect,

View file

@ -10,7 +10,7 @@ use crate::{
widgets::{Borders, Widget}, widgets::{Borders, Widget},
}; };
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum BorderType { pub enum BorderType {
#[default] #[default]
Plain, Plain,
@ -30,7 +30,7 @@ impl BorderType {
} }
} }
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)] #[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct Padding { pub struct Padding {
pub left: u16, pub left: u16,
pub right: u16, pub right: u16,

View file

@ -21,7 +21,7 @@ use crate::{
}; };
/// Display a month calendar for the month containing `display_date` /// Display a month calendar for the month containing `display_date`
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct Monthly<'a, S: DateStyler> { pub struct Monthly<'a, S: DateStyler> {
display_date: Date, display_date: Date,
events: S, events: S,
@ -173,7 +173,7 @@ pub trait DateStyler {
} }
/// A simple `DateStyler` based on a [`HashMap`] /// A simple `DateStyler` based on a [`HashMap`]
#[derive(Clone, Eq, PartialEq, Debug)] #[derive(Debug, Clone, Eq, PartialEq)]
pub struct CalendarEventStore(pub HashMap<Date, Style>); pub struct CalendarEventStore(pub HashMap<Date, Style>);
impl CalendarEventStore { impl CalendarEventStore {

View file

@ -355,7 +355,7 @@ impl<'a> Context<'a> {
/// }); /// });
/// }); /// });
/// ``` /// ```
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct Canvas<'a, F> pub struct Canvas<'a, F>
where where
F: Fn(&mut Context), F: Fn(&mut Context),

View file

@ -179,7 +179,7 @@ fn get_unicode_block<'a>(frac: f64) -> &'a str {
/// .line_set(symbols::line::THICK) /// .line_set(symbols::line::THICK)
/// .ratio(0.4); /// .ratio(0.4);
/// ``` /// ```
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct LineGauge<'a> { pub struct LineGauge<'a> {
block: Option<Block<'a>>, block: Option<Block<'a>>,
ratio: f64, ratio: f64,

View file

@ -208,7 +208,7 @@ where
} }
/// A state machine that truncates overhanging lines. /// A state machine that truncates overhanging lines.
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct LineTruncator<'a, O, I> pub struct LineTruncator<'a, O, I>
where where
// Outer iterator providing the individual lines // Outer iterator providing the individual lines

View file

@ -7,7 +7,7 @@ use crate::{
}; };
/// An enum representing the direction of scrolling in a Scrollbar widget. /// An enum representing the direction of scrolling in a Scrollbar widget.
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] #[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
pub enum ScrollDirection { pub enum ScrollDirection {
/// Forward scroll direction, usually corresponds to scrolling downwards or rightwards. /// Forward scroll direction, usually corresponds to scrolling downwards or rightwards.
#[default] #[default]