#![feature(async_closure)] #![feature(let_chains)] use std::sync::Arc; use aok::{Result, OK}; use map_await::{MapAwait, StreamExt}; use s3_put::S3Bucket; use static_init::constructor; use tracing::info; use walkdir::WalkDir; #[constructor(0)] extern "C" fn init() { loginit::init() } #[tokio::test] async fn test() -> Result<()> { let dir = env!("CARGO_MANIFEST_DIR"); let toml = format!("{dir}/Cargo.toml"); info!("{}", toml); let s3 = Arc::new(S3Bucket::from_env("i18ntmp")); let mut iter = WalkDir::new(dir).map_unordered(3, move |i| { let s3 = s3.clone(); async move { if let Ok::(i) = i { let file_type = i.file_type(); if file_type.is_file() { let path = i.path(); if let Some(url) = path.strip_prefix(dir)?.as_os_str().to_str() { info!("begin upload {url}"); s3.put(url, "text/js", path).await?; info!("uploaded {url}"); } } } OK } }); while let Some(r) = iter.next().await { r?; } OK }