zebra_chain/primitives/
viewing_key.rs
1use crate::parameters::Network;
4
5mod orchard;
6mod sapling;
7
8use orchard::OrchardViewingKey;
9use sapling::SaplingViewingKey;
10
11#[cfg(test)]
12mod tests;
13
14#[derive(Debug, Clone)]
16pub enum ViewingKey {
17 Sapling(SaplingViewingKey),
19
20 Orchard(OrchardViewingKey),
22}
23
24impl ViewingKey {
25 fn parse_sapling(sapling_key: &str, network: &Network) -> Option<Self> {
29 SaplingViewingKey::parse(sapling_key, network).map(Self::Sapling)
30 }
31
32 fn parse_orchard(sapling_key: &str, network: &Network) -> Option<Self> {
36 OrchardViewingKey::parse(sapling_key, network).map(Self::Orchard)
37 }
38
39 pub fn parse(key: &str, network: &Network) -> Option<Self> {
41 Self::parse_sapling(key, network).or_else(|| Self::parse_orchard(key, network))
42 }
43}