From 0c1584385c73667ee6f2a14204f585e96dd475c4 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 18 Feb 2021 13:40:42 -0800 Subject: [PATCH] tool: Support for owned and unowned generic Ec --- tool/src/access/mod.rs | 20 ++++++++++++++++++++ tool/src/ec.rs | 17 +++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/tool/src/access/mod.rs b/tool/src/access/mod.rs index 8f75a74..1aff1e7 100644 --- a/tool/src/access/mod.rs +++ b/tool/src/access/mod.rs @@ -24,3 +24,23 @@ pub trait Access { /// The maximum size that can be provided for the data argument fn data_size(&self) -> usize; } + +impl Access for &mut dyn Access { + unsafe fn command(&mut self, cmd: u8, data: &mut [u8]) -> Result { + (**self).command(cmd, data) + } + + fn data_size(&self) -> usize { + (**self).data_size() + } +} + +impl Access for Box { + unsafe fn command(&mut self, cmd: u8, data: &mut [u8]) -> Result { + (**self).command(cmd, data) + } + + fn data_size(&self) -> usize { + (**self).data_size() + } +} diff --git a/tool/src/ec.rs b/tool/src/ec.rs index 7d25b88..aed8c77 100644 --- a/tool/src/ec.rs +++ b/tool/src/ec.rs @@ -244,6 +244,23 @@ impl Ec { ]; self.command(Cmd::LedSetColor, &mut data) } + + pub fn as_dyn(&mut self) -> Ec<&mut dyn Access> { + Ec { + access: &mut self.access, + version: self.version, + + } + } + + pub fn into_dyn(self) -> Ec> + where A: 'static { + Ec { + access: Box::new(self.access), + version: self.version, + + } + } } pub struct EcSpi<'a, A: Access> {