keys.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. use std::{collections::HashMap, ops::Deref, sync::Arc};
  2. use crate::{Amount, PublicKey};
  3. use cashu::nuts::nut01::{Keys as KeysSdk, Response as KeysResponseSdk};
  4. use cashu::Amount as AmountSdk;
  5. pub struct Keys {
  6. inner: KeysSdk,
  7. }
  8. impl Deref for Keys {
  9. type Target = KeysSdk;
  10. fn deref(&self) -> &Self::Target {
  11. &self.inner
  12. }
  13. }
  14. impl From<Keys> for KeysSdk {
  15. fn from(keys: Keys) -> KeysSdk {
  16. keys.inner
  17. }
  18. }
  19. impl From<KeysSdk> for Keys {
  20. fn from(keys: KeysSdk) -> Keys {
  21. let keys = keys
  22. .keys()
  23. .into_iter()
  24. .map(|(amount, pk)| (amount.to_sat().to_string(), Arc::new(pk.into())))
  25. .collect();
  26. Keys::new(keys)
  27. }
  28. }
  29. impl Keys {
  30. pub fn new(keys: HashMap<String, Arc<PublicKey>>) -> Self {
  31. let keys = keys
  32. .into_iter()
  33. .map(|(amount, pk)| {
  34. (
  35. AmountSdk::from_sat(amount.parse::<u64>().unwrap()),
  36. pk.as_ref().into(),
  37. )
  38. })
  39. .collect();
  40. Self {
  41. inner: KeysSdk::new(keys),
  42. }
  43. }
  44. pub fn keys(&self) -> HashMap<String, Arc<PublicKey>> {
  45. self.inner
  46. .keys()
  47. .into_iter()
  48. .map(|(amount, pk)| (amount.to_sat().to_string(), Arc::new(pk.into())))
  49. .collect()
  50. }
  51. pub fn amount_key(&self, amount: Arc<Amount>) -> Option<Arc<PublicKey>> {
  52. self.inner
  53. .amount_key(*amount.as_ref().deref())
  54. .map(|pk| Arc::new(pk.into()))
  55. }
  56. pub fn as_hashmap(&self) -> HashMap<String, String> {
  57. self.inner
  58. .as_hashmap()
  59. .into_iter()
  60. .map(|(amount, pk)| (amount.to_sat().to_string(), pk))
  61. .collect()
  62. }
  63. }
  64. pub struct KeysResponse {
  65. inner: KeysResponseSdk,
  66. }
  67. impl Deref for KeysResponse {
  68. type Target = KeysResponseSdk;
  69. fn deref(&self) -> &Self::Target {
  70. &self.inner
  71. }
  72. }
  73. impl From<KeysResponse> for KeysResponseSdk {
  74. fn from(keys: KeysResponse) -> KeysResponseSdk {
  75. keys.inner
  76. }
  77. }
  78. impl From<KeysResponseSdk> for KeysResponse {
  79. fn from(keys: KeysResponseSdk) -> KeysResponse {
  80. KeysResponse { inner: keys }
  81. }
  82. }
  83. impl KeysResponse {
  84. pub fn new(keys: Arc<Keys>) -> Self {
  85. Self {
  86. inner: KeysResponseSdk {
  87. keys: keys.as_ref().deref().clone(),
  88. },
  89. }
  90. }
  91. }