|
1 |
| -use std::any::Any; |
2 |
| -use std::io::Read; |
| 1 | +//! A dynamically dispatched signer |
| 2 | +
|
| 3 | +use core::any::Any; |
| 4 | +use crate::io::Read; |
3 | 5 |
|
4 | 6 | use delegate::delegate;
|
5 | 7 |
|
@@ -35,17 +37,22 @@ use crate::util::test_utils::OnlyReadsKeysInterface;
|
35 | 37 |
|
36 | 38 | /// Helper to allow DynSigner to clone itself
|
37 | 39 | pub trait InnerSign: EcdsaChannelSigner + Send + Sync {
|
| 40 | + /// Clone into a Box |
38 | 41 | fn box_clone(&self) -> Box<dyn InnerSign>;
|
| 42 | + /// Cast to Any for runtime type checking |
39 | 43 | fn as_any(&self) -> &dyn Any;
|
| 44 | + /// Serialize the signer |
40 | 45 | fn vwrite(&self, writer: &mut Vec<u8>) -> Result<(), std::io::Error>;
|
41 | 46 | }
|
42 | 47 |
|
43 | 48 | /// A ChannelSigner derived struct allowing run-time selection of a signer
|
44 | 49 | pub struct DynSigner {
|
| 50 | + /// The inner signer |
45 | 51 | pub inner: Box<dyn InnerSign>,
|
46 | 52 | }
|
47 | 53 |
|
48 | 54 | impl DynSigner {
|
| 55 | + /// Create a new DynSigner |
49 | 56 | pub fn new<S: InnerSign + 'static>(inner: S) -> Self {
|
50 | 57 | DynSigner { inner: Box::new(inner) }
|
51 | 58 | }
|
@@ -189,11 +196,14 @@ impl InnerSign for InMemorySigner {
|
189 | 196 | }
|
190 | 197 | }
|
191 | 198 |
|
| 199 | +/// A convenience wrapper for DynKeysInterfaceTrait |
192 | 200 | pub struct DynKeysInterface {
|
| 201 | + /// The inner dyn keys interface |
193 | 202 | pub inner: Box<dyn DynKeysInterfaceTrait<EcdsaSigner = DynSigner>>,
|
194 | 203 | }
|
195 | 204 |
|
196 | 205 | impl DynKeysInterface {
|
| 206 | + /// Create a new DynKeysInterface |
197 | 207 | pub fn new(inner: Box<dyn DynKeysInterfaceTrait<EcdsaSigner = DynSigner>>) -> Self {
|
198 | 208 | DynKeysInterface { inner }
|
199 | 209 | }
|
@@ -264,15 +274,17 @@ impl OutputSpender for DynKeysInterface {
|
264 | 274 | }
|
265 | 275 | }
|
266 | 276 |
|
267 |
| -// A supertrait for all the traits that a keys interface implements |
| 277 | +/// A supertrait for all the traits that a keys interface implements |
268 | 278 | pub trait DynKeysInterfaceTrait: NodeSigner + OutputSpender + SignerProvider<EcdsaSigner=DynSigner> + EntropySource + Send + Sync {
|
269 | 279 | }
|
270 | 280 |
|
| 281 | +/// A dyn wrapper for PhantomKeysManager |
271 | 282 | pub struct DynPhantomKeysInterface {
|
272 | 283 | inner: PhantomKeysManager,
|
273 | 284 | }
|
274 | 285 |
|
275 | 286 | impl DynPhantomKeysInterface {
|
| 287 | + /// Create a new DynPhantomKeysInterface |
276 | 288 | pub fn new(inner: PhantomKeysManager) -> Self {
|
277 | 289 | DynPhantomKeysInterface { inner }
|
278 | 290 | }
|
@@ -350,6 +362,7 @@ impl OutputSpender for DynPhantomKeysInterface {
|
350 | 362 |
|
351 | 363 | impl DynKeysInterfaceTrait for DynPhantomKeysInterface {}
|
352 | 364 |
|
| 365 | +#[cfg(feature = "std")] |
353 | 366 | impl ReadableArgs<&DynKeysInterface> for DynSigner {
|
354 | 367 | fn read<R: Read>(_reader: &mut R, _params: &DynKeysInterface) -> Result<Self, DecodeError> {
|
355 | 368 | todo!()
|
|
0 commit comments