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