nut09.rs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. use std::ops::Deref;
  2. use cashu::nuts::nut09::{MintInfo, MintVersion};
  3. use wasm_bindgen::prelude::*;
  4. use crate::error::{into_err, Result};
  5. use super::nut01::JsPublicKey;
  6. #[wasm_bindgen(js_name = MintVersion)]
  7. pub struct JsMintVersion {
  8. inner: MintVersion,
  9. }
  10. impl Deref for JsMintVersion {
  11. type Target = MintVersion;
  12. fn deref(&self) -> &Self::Target {
  13. &self.inner
  14. }
  15. }
  16. impl From<MintVersion> for JsMintVersion {
  17. fn from(inner: MintVersion) -> JsMintVersion {
  18. JsMintVersion { inner }
  19. }
  20. }
  21. #[wasm_bindgen(js_class = MintVersion)]
  22. impl JsMintVersion {
  23. #[wasm_bindgen(constructor)]
  24. pub fn new(name: String, version: String) -> Result<JsMintVersion> {
  25. Ok(JsMintVersion {
  26. inner: MintVersion { name, version },
  27. })
  28. }
  29. /// Get Name
  30. #[wasm_bindgen(getter)]
  31. pub fn name(&self) -> String {
  32. self.inner.name.clone()
  33. }
  34. /// Get Name
  35. #[wasm_bindgen(getter)]
  36. pub fn version(&self) -> String {
  37. self.inner.version.clone()
  38. }
  39. }
  40. #[wasm_bindgen(js_name = MintInfo)]
  41. pub struct JsMintInfo {
  42. inner: MintInfo,
  43. }
  44. impl Deref for JsMintInfo {
  45. type Target = MintInfo;
  46. fn deref(&self) -> &Self::Target {
  47. &self.inner
  48. }
  49. }
  50. impl From<MintInfo> for JsMintInfo {
  51. fn from(inner: MintInfo) -> JsMintInfo {
  52. JsMintInfo { inner }
  53. }
  54. }
  55. #[wasm_bindgen(js_class = MintInfo)]
  56. impl JsMintInfo {
  57. #[wasm_bindgen(constructor)]
  58. #[allow(clippy::too_many_arguments)]
  59. pub fn new(
  60. name: Option<String>,
  61. pubkey: Option<JsPublicKey>,
  62. version: Option<JsMintVersion>,
  63. description: Option<String>,
  64. description_long: Option<String>,
  65. contact: JsValue,
  66. nuts: JsValue,
  67. motd: Option<String>,
  68. ) -> Result<JsMintInfo> {
  69. Ok(JsMintInfo {
  70. inner: MintInfo {
  71. name,
  72. pubkey: pubkey.map(|p| p.deref().clone()),
  73. version: version.map(|v| v.deref().clone()),
  74. description,
  75. description_long,
  76. contact: serde_wasm_bindgen::from_value(contact).map_err(into_err)?,
  77. nuts: serde_wasm_bindgen::from_value(nuts).map_err(into_err)?,
  78. motd,
  79. },
  80. })
  81. }
  82. /// Get Name
  83. #[wasm_bindgen(getter)]
  84. pub fn name(&self) -> Option<String> {
  85. self.inner.name.clone()
  86. }
  87. /// Get Pubkey
  88. #[wasm_bindgen(getter)]
  89. pub fn pubkey(&self) -> Option<JsPublicKey> {
  90. self.inner.pubkey.clone().map(|p| p.into())
  91. }
  92. /// Get Name
  93. #[wasm_bindgen(getter)]
  94. pub fn version(&self) -> Option<JsMintVersion> {
  95. self.inner.version.clone().map(|v| v.into())
  96. }
  97. /// Get description
  98. #[wasm_bindgen(getter)]
  99. pub fn description(&self) -> Option<String> {
  100. self.inner.description.clone()
  101. }
  102. /// Get description long
  103. #[wasm_bindgen(getter)]
  104. pub fn description_long(&self) -> Option<String> {
  105. self.inner.description_long.clone()
  106. }
  107. /// Get contact
  108. #[wasm_bindgen(getter)]
  109. pub fn contact(&self) -> Result<JsValue> {
  110. serde_wasm_bindgen::to_value(&self.inner.contact).map_err(into_err)
  111. }
  112. /// Get supported nuts
  113. #[wasm_bindgen(getter)]
  114. pub fn nuts(&self) -> Result<JsValue> {
  115. serde_wasm_bindgen::to_value(&self.inner.nuts).map_err(into_err)
  116. }
  117. /// Get motd
  118. #[wasm_bindgen(getter)]
  119. pub fn motd(&self) -> Option<String> {
  120. self.inner.motd.clone()
  121. }
  122. }