|
| 1 | +#[cfg(target_arch = "wasm32")] |
1 | 2 | use js_sys::Promise; |
| 3 | +#[cfg(target_arch = "wasm32")] |
2 | 4 | use rand::rngs::OsRng; |
| 5 | +#[cfg(target_arch = "wasm32")] |
3 | 6 | use serde_wasm_bindgen::to_value; |
| 7 | +#[cfg(target_arch = "wasm32")] |
4 | 8 | use wasm_bindgen::prelude::*; |
5 | 9 |
|
| 10 | +#[cfg(target_arch = "wasm32")] |
6 | 11 | use crate::{hex_to_field, AccountCode, AccountSalt, PaddedEmailAddr, ParsedEmail}; |
7 | 12 |
|
8 | 13 | #[wasm_bindgen] |
9 | 14 | #[allow(non_snake_case)] |
| 15 | +#[cfg(target_arch = "wasm32")] |
| 16 | +/// Parses a raw email string into a structured `ParsedEmail` object. |
| 17 | +/// |
| 18 | +/// This function utilizes the `ParsedEmail::new_from_raw_email` method to parse the email, |
| 19 | +/// and then serializes the result for JavaScript interoperability. |
| 20 | +/// |
| 21 | +/// # Arguments |
| 22 | +/// |
| 23 | +/// * `raw_email` - A `String` representing the raw email to be parsed. |
| 24 | +/// |
| 25 | +/// # Returns |
| 26 | +/// |
| 27 | +/// A `Promise` that resolves with the serialized `ParsedEmail` or rejects with an error message. |
10 | 28 | pub async fn parseEmail(raw_email: String) -> Promise { |
11 | | - let parsed_email = ParsedEmail::new_from_raw_email(&raw_email) |
12 | | - .await |
13 | | - .expect("Failed to parse email"); |
14 | | - let parsed_email = to_value(&parsed_email).expect("Failed to serialize ParsedEmail"); |
15 | | - Promise::resolve(&parsed_email) |
| 29 | + match ParsedEmail::new_from_raw_email(&raw_email).await { |
| 30 | + Ok(parsed_email) => match to_value(&parsed_email) { |
| 31 | + Ok(serialized_email) => Promise::resolve(&serialized_email), |
| 32 | + Err(_) => Promise::reject(&JsValue::from_str("Failed to serialize ParsedEmail")), |
| 33 | + }, |
| 34 | + Err(_) => Promise::reject(&JsValue::from_str("Failed to parse email")), |
| 35 | + } |
16 | 36 | } |
17 | 37 |
|
18 | 38 | #[wasm_bindgen] |
19 | 39 | #[allow(non_snake_case)] |
20 | | -pub async fn generateAccountCode() -> JsValue { |
21 | | - to_value(&AccountCode::new(OsRng)).expect("Failed to serialize AccountCode") |
| 40 | +#[cfg(target_arch = "wasm32")] |
| 41 | +/// Generates a new `AccountCode` using a secure random number generator. |
| 42 | +/// |
| 43 | +/// This function creates a new `AccountCode` and serializes it for JavaScript interoperability. |
| 44 | +/// |
| 45 | +/// # Returns |
| 46 | +/// |
| 47 | +/// A `Promise` that resolves with the serialized `AccountCode` or rejects with an error message. |
| 48 | +pub async fn generateAccountCode() -> Promise { |
| 49 | + match to_value(&AccountCode::new(OsRng)) { |
| 50 | + Ok(serialized_code) => Promise::resolve(&serialized_code), |
| 51 | + Err(_) => Promise::reject(&JsValue::from_str("Failed to serialize AccountCode")), |
| 52 | + } |
22 | 53 | } |
23 | 54 |
|
24 | 55 | #[wasm_bindgen] |
25 | 56 | #[allow(non_snake_case)] |
26 | | -pub async fn generateAccountSalt(email_addr: String, account_code: String) -> JsValue { |
| 57 | +#[cfg(target_arch = "wasm32")] |
| 58 | +/// Generates an `AccountSalt` using a padded email address and an account code. |
| 59 | +/// |
| 60 | +/// This function converts the email address to a padded format, parses the account code, |
| 61 | +/// and generates an `AccountSalt`, which is then serialized for JavaScript interoperability. |
| 62 | +/// |
| 63 | +/// # Arguments |
| 64 | +/// |
| 65 | +/// * `email_addr` - A `String` representing the email address. |
| 66 | +/// * `account_code` - A `String` representing the account code in hexadecimal format. |
| 67 | +/// |
| 68 | +/// # Returns |
| 69 | +/// |
| 70 | +/// A `Promise` that resolves with the serialized `AccountSalt` or rejects with an error message. |
| 71 | +pub async fn generateAccountSalt(email_addr: String, account_code: String) -> Promise { |
27 | 72 | let email_addr = PaddedEmailAddr::from_email_addr(&email_addr); |
28 | | - let account_code = |
29 | | - AccountCode::from(hex_to_field(&account_code).expect("Failed to parse AccountCode")); |
30 | | - let account_salt = |
31 | | - AccountSalt::new(&email_addr, account_code).expect("Failed to generate AccountSalt"); |
32 | | - to_value(&account_salt).expect("Failed to serialize AccountSalt") |
| 73 | + let account_code = match hex_to_field(&account_code) { |
| 74 | + Ok(field) => AccountCode::from(field), |
| 75 | + Err(_) => return Promise::reject(&JsValue::from_str("Failed to parse AccountCode")), |
| 76 | + }; |
| 77 | + let account_salt = match AccountSalt::new(&email_addr, account_code) { |
| 78 | + Ok(salt) => salt, |
| 79 | + Err(_) => return Promise::reject(&JsValue::from_str("Failed to generate AccountSalt")), |
| 80 | + }; |
| 81 | + match to_value(&account_salt) { |
| 82 | + Ok(serialized_salt) => Promise::resolve(&serialized_salt), |
| 83 | + Err(_) => Promise::reject(&JsValue::from_str("Failed to serialize AccountSalt")), |
| 84 | + } |
33 | 85 | } |
34 | 86 |
|
35 | 87 | #[wasm_bindgen] |
36 | 88 | #[allow(non_snake_case)] |
37 | | -pub async fn padEmailAddr(email_addr: String) -> JsValue { |
| 89 | +#[cfg(target_arch = "wasm32")] |
| 90 | +/// Pads an email address to a fixed length format. |
| 91 | +/// |
| 92 | +/// This function converts the email address to a padded format and serializes it |
| 93 | +/// for JavaScript interoperability. |
| 94 | +/// |
| 95 | +/// # Arguments |
| 96 | +/// |
| 97 | +/// * `email_addr` - A `String` representing the email address to be padded. |
| 98 | +/// |
| 99 | +/// # Returns |
| 100 | +/// |
| 101 | +/// A `Promise` that resolves with the serialized padded email address or rejects with an error message. |
| 102 | +pub async fn padEmailAddr(email_addr: String) -> Promise { |
38 | 103 | let padded_email_addr = PaddedEmailAddr::from_email_addr(&email_addr); |
39 | | - to_value(&padded_email_addr).expect("Failed to serialize padded_email_addr") |
| 104 | + match to_value(&padded_email_addr) { |
| 105 | + Ok(serialized_addr) => Promise::resolve(&serialized_addr), |
| 106 | + Err(_) => Promise::reject(&JsValue::from_str("Failed to serialize padded_email_addr")), |
| 107 | + } |
40 | 108 | } |
0 commit comments