ferrijs-std 0.2.2

Node and web standard library for the ferrijs QuickJS runtime: WHATWG Streams, Events, AbortController, Buffer, crypto, fs, os, url, zlib and the capability model they enforce (partly derived from awslabs/llrt, Apache-2.0).
Documentation
use rquickjs::{Function, Object, Result};

use crate::stream_web::utils::ValueOrUndefined;

/// dictionary Transformer {
///   TransformerStartCallback start;
///   TransformerTransformCallback transform;
///   TransformerFlushCallback flush;
///   TransformerCancelCallback cancel;
///   any readableType;
///   any writableType;
/// };
#[derive(Default)]
pub(super) struct Transformer<'js> {
    pub start: Option<Function<'js>>,
    pub transform: Option<Function<'js>>,
    pub flush: Option<Function<'js>>,
    pub cancel: Option<Function<'js>>,
    pub readable_type: bool,
    pub writable_type: bool,
}

impl<'js> Transformer<'js> {
    pub fn from_object(obj: Object<'js>) -> Result<Self> {
        let start = obj.get_value_or_undefined::<_, _>("start")?;
        let transform = obj.get_value_or_undefined::<_, _>("transform")?;
        let flush = obj.get_value_or_undefined::<_, _>("flush")?;
        let cancel = obj.get_value_or_undefined::<_, _>("cancel")?;
        let readable_type: Option<rquickjs::Value<'js>> =
            obj.get_value_or_undefined("readableType")?;
        let writable_type: Option<rquickjs::Value<'js>> =
            obj.get_value_or_undefined("writableType")?;

        Ok(Self {
            start,
            transform,
            flush,
            cancel,
            readable_type: readable_type.is_some(),
            writable_type: writable_type.is_some(),
        })
    }
}