Rust コードメモ(APIコール)

lib.rs

use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use futures::prelude::*;
use js_sys::Promise;
use wasm_bindgen_futures::{future_to_promise, JsFuture};
use web_sys::{Request, RequestInit, RequestMode, Response};

#[wasm_bindgen]
pub fn getApiMessage() -> Promise {
    let url = "http://127.0.0.1:8080/api/control/text";
    let mut opts = RequestInit::new();
    opts.method("GET");
    opts.mode(RequestMode::Cors);
    let request = Request::new_with_str_and_init(&url, &opts).unwrap();
    request
        .headers()
        .set("Accept", "text/html")
        .unwrap();
    let window = web_sys::window().unwrap();
    let request_promise: Promise = window.fetch_with_request(&request);

    let future = JsFuture::from(request_promise)
    .and_then(|resp_value| async {
        assert!(resp_value.is_instance_of::<Response>());
        let resp: Response = resp_value.dyn_into().unwrap();
        resp.text()
    })
    .and_then(|text| async move {
        Ok(JsValue::from(text))
    });

    future_to_promise(future)
}

JS

<script type="module">
    import init, {getApiMessage} from "./pkg/apitest.js";
    
    async function run() {
        await init();
        const ret = await getApiMessage();
        console.log(ret); 
    }
    run();
</script>
bannerAds