How can I implement a rust constructor compiled to wasm that will allow for javascript destructuring?

59 Views Asked by At

I'm using rust-wasm, wasm-bindgen, to create a javascript wrapper for a rust library.

I have a rust constructor currently defined like

#[wasm_bindgen(js_class = Dater)]
impl DaterWrapper {
    #[wasm_bindgen(constructor)]
    pub fn new(
        dts: Option<String>,
        code: Option<String>,
        raw: Option<Vec<u8>>,
        qb64b: Option<Vec<u8>>,
        qb64: Option<String>,
        qb2: Option<Vec<u8>>,
    ) -> Result<DaterWrapper> {
        let dater = Dater::new(
            dts.as_deref(),
            code.as_deref(),
            raw.as_deref(),
            qb64b.as_deref(),
            qb64.as_deref(),
            qb2.as_deref(),
        )
        .as_js()?;
        Ok(DaterWrapper(dater))

It generates a js type constructor:

constructor(dts?: string, code?: string, raw?: Uint8Array, qb64b?: Uint8Array, qb64?: string, qb2?: Uint8Array);

Which doesn't allow for javascript destructuring. I'd like to used javascript destructuring to support named parameters in construction like new Dater({dts: now_datetime}).

How can I create a Rust constructor that allows for a call from javascript that will support destructuring?

0

There are 0 best solutions below