use js_sys::{ArrayBuffer, Uint8Array};
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;
use crate::send::SendFuture;
pub struct DigestStream {
inner: worker_sys::DigestStream,
}
impl DigestStream {
pub fn new(algo: DigestStreamAlgorithm) -> Self {
Self {
inner: worker_sys::DigestStream::new(algo.as_str()),
}
}
pub async fn digest(&self) -> Result<Uint8Array, crate::Error> {
let fut = SendFuture::new(JsFuture::from(self.inner.digest()));
let buffer: ArrayBuffer = fut.await?.unchecked_into();
Ok(Uint8Array::new(&buffer))
}
pub fn raw(&self) -> &worker_sys::DigestStream {
&self.inner
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum DigestStreamAlgorithm {
Sha1,
Sha256,
Sha384,
Sha512,
}
impl DigestStreamAlgorithm {
pub fn as_str(self) -> &'static str {
match self {
Self::Sha1 => "SHA-1",
Self::Sha256 => "SHA-256",
Self::Sha384 => "SHA-384",
Self::Sha512 => "SHA-512",
}
}
}