1use crate::primitives::private_key::PrivateKey;
7use crate::primitives::public_key::PublicKey;
8
9pub type PubKeyHex = String;
15
16pub type SatoshiValue = u64;
18
19pub type OutpointString = String;
21
22pub type TXIDHexString = String;
24
25pub type DescriptionString5to50Bytes = String;
27
28pub type BasketStringUnder300Bytes = String;
30
31pub type OutputTagStringUnder300Bytes = String;
33
34pub type LabelStringUnder300Bytes = String;
36
37pub type KeyIDStringUnder800Bytes = String;
39
40pub type OriginatorDomainNameStringUnder250Bytes = String;
42
43pub type CertificateFieldNameUnder50Bytes = String;
45
46pub type Base64String = String;
48
49pub type HexString = String;
51
52pub type BooleanDefaultTrue = Option<bool>;
54
55pub type BooleanDefaultFalse = Option<bool>;
57
58pub type PositiveIntegerDefault10Max10000 = Option<u32>;
60
61pub type PositiveIntegerOrZero = u32;
63
64#[derive(Clone, Debug)]
79pub struct Protocol {
80 pub security_level: u8,
81 pub protocol: String,
82}
83
84#[cfg(feature = "network")]
85impl serde::Serialize for Protocol {
86 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
87 use serde::ser::SerializeSeq;
88 let mut seq = serializer.serialize_seq(Some(2))?;
89 seq.serialize_element(&self.security_level)?;
90 seq.serialize_element(&self.protocol)?;
91 seq.end()
92 }
93}
94
95#[cfg(feature = "network")]
96impl<'de> serde::Deserialize<'de> for Protocol {
97 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
98 use serde::de::{self, SeqAccess, Visitor};
99 use std::fmt;
100
101 struct ProtocolVisitor;
102
103 impl<'de> Visitor<'de> for ProtocolVisitor {
104 type Value = Protocol;
105
106 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
107 formatter.write_str("an array [securityLevel, protocolName]")
108 }
109
110 fn visit_seq<A: SeqAccess<'de>>(self, mut seq: A) -> Result<Protocol, A::Error> {
111 let security_level: u8 = seq
112 .next_element()?
113 .ok_or_else(|| de::Error::invalid_length(0, &self))?;
114 let protocol: String = seq
115 .next_element()?
116 .ok_or_else(|| de::Error::invalid_length(1, &self))?;
117 Ok(Protocol {
118 security_level,
119 protocol,
120 })
121 }
122 }
123
124 deserializer.deserialize_seq(ProtocolVisitor)
125 }
126}
127
128#[derive(Clone, Debug, PartialEq)]
134pub enum CounterpartyType {
135 Uninitialized,
137 Self_,
139 Anyone,
141 Other,
143}
144
145#[derive(Clone, Debug)]
153pub struct Counterparty {
154 pub counterparty_type: CounterpartyType,
155 pub public_key: Option<PublicKey>,
156}
157
158#[cfg(feature = "network")]
159impl serde::Serialize for Counterparty {
160 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
161 match self.counterparty_type {
162 CounterpartyType::Anyone => serializer.serialize_str("anyone"),
163 CounterpartyType::Self_ => serializer.serialize_str("self"),
164 CounterpartyType::Other => {
165 if let Some(ref pk) = self.public_key {
166 serializer.serialize_str(&pk.to_der_hex())
167 } else {
168 serializer.serialize_none()
169 }
170 }
171 CounterpartyType::Uninitialized => serializer.serialize_str(""),
172 }
173 }
174}
175
176#[cfg(feature = "network")]
177impl<'de> serde::Deserialize<'de> for Counterparty {
178 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
179 let s = String::deserialize(deserializer)?;
180 match s.as_str() {
181 "anyone" => Ok(Counterparty {
182 counterparty_type: CounterpartyType::Anyone,
183 public_key: None,
184 }),
185 "self" => Ok(Counterparty {
186 counterparty_type: CounterpartyType::Self_,
187 public_key: None,
188 }),
189 "" => Ok(Counterparty {
190 counterparty_type: CounterpartyType::Uninitialized,
191 public_key: None,
192 }),
193 hex_str => {
194 let pk = PublicKey::from_string(hex_str).map_err(serde::de::Error::custom)?;
195 Ok(Counterparty {
196 counterparty_type: CounterpartyType::Other,
197 public_key: Some(pk),
198 })
199 }
200 }
201 }
202}
203
204pub fn anyone_pubkey() -> PublicKey {
214 let priv_key = PrivateKey::from_bytes(&{
215 let mut buf = [0u8; 32];
216 buf[31] = 1;
217 buf
218 })
219 .expect("PrivateKey(1) is always valid");
221 priv_key.to_public_key()
222}
223
224pub fn anyone_private_key() -> PrivateKey {
226 PrivateKey::from_bytes(&{
227 let mut buf = [0u8; 32];
228 buf[31] = 1;
229 buf
230 })
231 .expect("PrivateKey(1) is always valid")
233}