diff --git a/src/operations/cdt.rs b/src/operations/cdt.rs index 55902ac0..5bf0fa67 100644 --- a/src/operations/cdt.rs +++ b/src/operations/cdt.rs @@ -22,6 +22,7 @@ use crate::operations::cdt_context::CdtContext; use crate::Value; #[doc(hidden)] +#[derive(Clone)] pub enum CdtArgument<'a> { Byte(u8), Int(i64), @@ -34,7 +35,14 @@ pub enum CdtArgument<'a> { pub type OperationEncoder = Box, &CdtOperation, &[CdtContext]) -> Result>; +impl Clone for Box { + fn clone(&self) -> Self { + self.clone_box() + } +} + #[doc(hidden)] +#[derive(Clone)] pub struct CdtOperation<'a> { pub op: u8, pub encoder: OperationEncoder, diff --git a/src/operations/exp.rs b/src/operations/exp.rs index 114a6618..9e3caf5a 100644 --- a/src/operations/exp.rs +++ b/src/operations/exp.rs @@ -48,6 +48,7 @@ pub enum ExpWriteFlags { pub type ExpressionEncoder = Box, &ExpOperation) -> Result>; #[doc(hidden)] +#[derive(Clone)] pub struct ExpOperation<'a> { pub encoder: ExpressionEncoder, pub policy: i64, diff --git a/src/operations/mod.rs b/src/operations/mod.rs index 57e38a50..a6e47393 100644 --- a/src/operations/mod.rs +++ b/src/operations/mod.rs @@ -57,6 +57,7 @@ pub enum OperationType { } #[doc(hidden)] +#[derive(Clone)] pub enum OperationData<'a> { None, Value(&'a Value), @@ -68,6 +69,7 @@ pub enum OperationData<'a> { } #[doc(hidden)] +#[derive(Clone)] pub enum OperationBin<'a> { None, All, @@ -75,6 +77,7 @@ pub enum OperationBin<'a> { } /// Database operation definition. This data type is used in the client's `operate()` method. +#[derive(Clone)] pub struct Operation<'a> { // OpType determines type of operation. #[doc(hidden)]