wx_mini_api 0.1.27

微信小程序api wasm接口
Documentation
use js_sys::*;
use serde::{Deserialize, Serialize};
use serde_wasm_bindgen::to_value;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = wx, js_name = showTabBarRedDot)]
    fn show_tab_bar_red_dot(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = showTabBar)]
    fn show_tab_bar(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = setTabBarStyle)]
    fn set_tab_bar_style(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = setTabBarItem)]
    fn set_tab_bar_item(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = setTabBarBadge)]
    fn set_tab_bar_badge(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = removeTabBarBadge)]
    fn remove_tab_bar_badge(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = hideTabBarRedDot)]
    fn hide_tab_bar_red_dot(params: &Object);
    #[wasm_bindgen(js_namespace = wx, js_name = hideTabBar)]
    fn hide_tab_bar(params: &Object);
}

pub fn wx_show_tab_bar_red_dot(index: u8) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("index"),
        &JsValue::from(to_value(&index).unwrap()),
    )
    .unwrap();
    show_tab_bar_red_dot(&params);
}

pub fn wx_show_tab_bar(animation: bool) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("animation"),
        &JsValue::from(to_value(&animation).unwrap()),
    )
    .unwrap();
    show_tab_bar(&params);
}

#[derive(Deserialize, Serialize, Debug, PartialEq, Eq, Default)]
pub enum SetTabBarStyleBorder {
    #[default]
    #[serde(rename = "white")]
    White,
    #[serde(rename = "black")]
    Black,
}
#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarStyle<'a> {
    pub color: Option<&'a str>,
    pub selected_color: Option<&'a str>,
    pub background_color: Option<&'a str>,
    pub border_style: Option<SetTabBarStyleBorder>,
}
pub fn wx_set_tab_bar_style<'a>(data: SetTabBarStyle<'a>) {
    let params = Object::new();
    if let Some(v) = data.color {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("color"), &value).unwrap();
    }
    if let Some(v) = data.selected_color {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("selectedColor"), &value).unwrap();
    }
    if let Some(v) = data.background_color {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("backgroundColor"), &value).unwrap();
    }
    if let Some(v) = data.border_style {
        let value = to_value(&v).unwrap();
        Reflect::set(
            &params,
            &JsValue::from("borderStyle"),
            &JsValue::from(&value),
        )
        .unwrap();
    }
    set_tab_bar_style(&params);
}

#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarItem<'a> {
    pub index: u8,
    pub text: Option<&'a str>,
    pub icon_path: Option<&'a str>,
    pub selected_icon_path: Option<&'a str>,
}
pub fn wx_set_tab_bar_item<'a>(data: SetTabBarItem<'a>) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("index"),
        &JsValue::from(to_value(&data.index).unwrap()),
    )
    .unwrap();

    if let Some(v) = data.text {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("text"), &value).unwrap();
    }
    if let Some(v) = data.icon_path {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("iconPath"), &value).unwrap();
    }
    if let Some(v) = data.selected_icon_path {
        let value = to_value(v).unwrap();
        Reflect::set(&params, &JsValue::from("selectedIconPath"), &value).unwrap();
    }
    set_tab_bar_item(&params);
}

#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarBadge<'a> {
    pub index: u8,
    pub text: &'a str,
}
pub fn wx_set_tab_bar_badge<'a>(data: SetTabBarBadge<'a>) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("index"),
        &JsValue::from(to_value(&data.index).unwrap()),
    )
    .unwrap();
    Reflect::set(
        &params,
        &JsValue::from("text"),
        &JsValue::from(to_value(data.text).unwrap()),
    )
    .unwrap();

    set_tab_bar_badge(&params);
}

pub fn wx_remove_tab_bar_badge(index: u8) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("index"),
        &JsValue::from(to_value(&index).unwrap()),
    )
    .unwrap();
    remove_tab_bar_badge(&params);
}

pub fn wx_hide_tab_bar_red_dot(index: u8) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("index"),
        &JsValue::from(to_value(&index).unwrap()),
    )
    .unwrap();
    hide_tab_bar_red_dot(&params);
}

pub fn wx_hide_tab_bar(animation: bool) {
    let params = Object::new();
    Reflect::set(
        &params,
        &JsValue::from("animation"),
        &JsValue::from(to_value(&animation).unwrap()),
    )
    .unwrap();
    hide_tab_bar(&params);
}