diff --git a/src/edit/editor.rs b/src/edit/editor.rs index eaf02cd..1231002 100644 --- a/src/edit/editor.rs +++ b/src/edit/editor.rs @@ -16,7 +16,7 @@ use crate::{ }; /// A wrapper of [`Buffer`] for easy editing -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Editor<'buffer> { buffer_ref: BufferRef<'buffer>, cursor: Cursor, diff --git a/src/edit/mod.rs b/src/edit/mod.rs index c070831..4f3b4fc 100644 --- a/src/edit/mod.rs +++ b/src/edit/mod.rs @@ -71,6 +71,16 @@ pub enum BufferRef<'buffer> { Arc(Arc), } +impl<'buffer> Clone for BufferRef<'buffer> { + fn clone(&self) -> Self { + match self { + Self::Owned(buffer) => Self::Owned(buffer.clone()), + Self::Borrowed(buffer) => Self::Owned((*buffer).to_owned()), + Self::Arc(buffer) => Self::Arc(buffer.clone()), + } + } +} + impl<'buffer> From for BufferRef<'buffer> { fn from(buffer: Buffer) -> Self { Self::Owned(buffer)