use std::collections::hash_map::DefaultHasher;
use std::str::FromStr;
use wasm_bindgen::prelude::*;
use crate::to_ascii;
use super::OkId;
#[wasm_bindgen]
impl OkId {
#[wasm_bindgen(js_name = fromString)]
pub fn from_string(s: &str) -> Result<OkId, JsError> {
OkId::from_str(s).map_err(|e| JsError::new(&e.to_string()))
}
#[cfg(feature = "wasm")]
#[wasm_bindgen]
pub fn from_path(u: web_sys::Url) -> Result<OkId, JsError> {
let path = u.pathname();
let path = path.trim_start_matches('/');
let path = percent_encoding::percent_decode_str(path)
.decode_utf8()
.map_err(|e| JsError::new(&e.to_string()))?;
OkId::from_string(&path)
}
#[wasm_bindgen(js_name = toString)]
pub fn js_to_string(&self) -> String {
format!("{}", self)
}
#[wasm_bindgen(js_name = hashType)]
pub fn hash_type(&self) -> String {
self.hash_type.to_string()
}
#[wasm_bindgen(js_name = toAscii)]
pub fn to_ascii(&self) -> String {
to_ascii(*self)
}
#[cfg(feature = "sha2")]
#[wasm_bindgen(js_name = fromSha256)]
pub fn from_sha256(data: &[u8]) -> OkId {
use digest::Digest;
let mut hasher = ::sha2::Sha256::new();
hasher.update(data);
hasher.into()
}
#[cfg(feature = "blake3")]
#[wasm_bindgen(js_name = fromBlake3)]
pub fn from_blake3(data: &[u8]) -> OkId {
let mut hasher = ::blake3::Hasher::new();
hasher.update(data);
hasher.into()
}
#[cfg(feature = "uuid")]
#[wasm_bindgen(js_name = newUuid)]
pub fn new_uuid() -> OkId {
::uuid::Uuid::new_v4().into()
}
#[cfg(feature = "ulid")]
#[wasm_bindgen(js_name = newUlid)]
pub fn new_ulid() -> OkId {
::ulid::Ulid::new().into()
}
#[wasm_bindgen(js_name = fingerprint)]
pub fn fingerprint(data: &[u8]) -> OkId {
use std::hash::Hash;
use std::hash::Hasher;
let mut hasher = DefaultHasher::new();
data.hash(&mut hasher);
hasher.finish().into()
}
}