2a122da34470332e1147a427de86c864abe4adab
[rust-lightning] / lightning / src / sign / type_resolver.rs
1 use core::ops::Deref;
2 use crate::sign::{ChannelSigner, SignerProvider};
3
4 pub(crate) enum ChannelSignerType<SP: Deref> where SP::Target: SignerProvider {
5         // in practice, this will only ever be an EcdsaChannelSigner (specifically, Writeable)
6         Ecdsa(<SP::Target as SignerProvider>::EcdsaSigner),
7         #[cfg(taproot)]
8         Taproot(<SP::Target as SignerProvider>::TaprootSigner),
9 }
10
11 impl<SP: Deref> ChannelSignerType<SP> where SP::Target: SignerProvider {
12         pub(crate) fn as_ref(&self) -> &dyn ChannelSigner {
13                 match self {
14                         ChannelSignerType::Ecdsa(ecs) => ecs,
15                         #[cfg(taproot)]
16                         ChannelSignerType::Taproot(tcs) => tcs,
17                 }
18         }
19
20         pub(crate) fn as_mut(&mut self) -> &mut dyn ChannelSigner {
21                 match self {
22                         ChannelSignerType::Ecdsa(ecs) => ecs,
23                         #[cfg(taproot)]
24                         ChannelSignerType::Taproot(tcs) => tcs,
25                 }
26         }
27
28         #[allow(unused)]
29         pub(crate) fn as_ecdsa(&self) -> Option<&<SP::Target as SignerProvider>::EcdsaSigner> {
30                 match self {
31                         ChannelSignerType::Ecdsa(ecs) => Some(ecs),
32                         _ => None
33                 }
34         }
35
36         #[allow(unused)]
37         pub(crate) fn as_mut_ecdsa(&mut self) -> Option<&mut <SP::Target as SignerProvider>::EcdsaSigner> {
38                 match self {
39                         ChannelSignerType::Ecdsa(ecs) => Some(ecs),
40                         _ => None
41                 }
42         }
43 }