fusio 0.6.0

Fusio provides lean, minimal cost abstraction and extensible Read / Write trait to multiple storage on multiple poll-based / completion-based async runtime.
Documentation
#[cfg(all(feature = "web-http", target_arch = "wasm32", test))]
pub(crate) mod tests {

    wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
    use wasm_bindgen_test::wasm_bindgen_test;

    #[cfg(feature = "aws")]
    #[wasm_bindgen_test]
    async fn test_read_write_s3_wasm() {
        use fusio::{
            fs::{Fs, OpenOptions},
            remotes::aws::{fs::AmazonS3Builder, AwsCredential},
            Read, Write,
        };

        if option_env!("AWS_ACCESS_KEY_ID").is_none() {
            return;
        }
        let key_id = option_env!("AWS_ACCESS_KEY_ID").unwrap().to_string();
        let secret_key = option_env!("AWS_SECRET_ACCESS_KEY").unwrap().to_string();

        let bucket = std::option_env!("BUCKET_NAME")
            .expect("expected bucket not to be empty")
            .to_string();
        let region = std::option_env!("AWS_REGION")
            .expect("expected region not to be empty")
            .to_string();
        let token = std::option_env!("AWS_SESSION_TOKEN").map(|v| v.to_string());

        let s3 = AmazonS3Builder::new(bucket)
            .credential(AwsCredential {
                key_id,
                secret_key,
                token,
            })
            .region(region)
            .sign_payload(true)
            .build();

        {
            let mut s3_file = s3
                .open_options(
                    &"wasm/read-write.txt".into(),
                    OpenOptions::default().write(true).truncate(true),
                )
                .await
                .unwrap();

            let (result, _) = s3_file
                .write_all(&b"The answer of life, universe and everthing"[..])
                .await;

            result.unwrap();

            s3_file.close().await.unwrap();
        }
        let mut s3_file = s3.open(&"read-write.txt".into()).await.unwrap();

        let size = s3_file.size().await.unwrap();
        assert_eq!(size, 42);
        let buf = Vec::new();
        let (result, buf) = s3_file.read_to_end_at(buf, 0).await;
        result.unwrap();
        assert_eq!(buf, b"The answer of life, universe and everthing");
    }
}