diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-06-18 04:40:25 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-06-18 04:40:25 +0800 |
| commit | 7879ac01b24eb9723ec0a814adaee1fc9c52610a (patch) | |
| tree | d1c9a07e3ef8819869494c45e96bcd3e98856bdb /rola-cli/src/tokio_wrapper.rs | |
| parent | 0b8e6e7d18abb94bd99553dc1d2b0ba5d4f265ea (diff) | |
feat(rola-cli): implement bucket creation and CLI entry point
Add bucket creation logic with pre-checks, localized error handling, and
a basic CLI entry point using the mingling framework. Introduce a
placeholder protocol for bucket transfer testing.
Diffstat (limited to 'rola-cli/src/tokio_wrapper.rs')
| -rw-r--r-- | rola-cli/src/tokio_wrapper.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/rola-cli/src/tokio_wrapper.rs b/rola-cli/src/tokio_wrapper.rs new file mode 100644 index 0000000..8293355 --- /dev/null +++ b/rola-cli/src/tokio_wrapper.rs @@ -0,0 +1,48 @@ +use std::future::Future; + +/// Runs an async function to completion by creating a Tokio runtime +/// and blocking on the future within it. +/// +/// # Example +/// +/// ``` +/// use tokio_wrapper::tokio_run; +/// +/// let result = tokio_run(async { +/// // your async code here +/// 42 +/// }); +/// println!("Result: {}", result); +/// ``` +pub fn tokio_run<F, T>(future: F) -> T +where + F: Future<Output = T>, +{ + // Create a new Tokio runtime and block on the future + let rt = tokio::runtime::Runtime::new().expect("Failed to create Tokio runtime"); + rt.block_on(future) +} + +/// A macro that wraps an async expression with `tokio_run`. +/// +/// Equivalent to: +/// ```ignore +/// tokio_run(async move { ... }) +/// ``` +/// +/// # Example +/// +/// ``` +/// use tokio_wrapper::tkr; +/// +/// // Instead of: +/// // tokio_run(async move { some_async_fn().await }) +/// // Use: +/// let result = tkr! { some_async_fn().await }; +/// ``` +#[macro_export] +macro_rules! tkr { + ($($expr:tt)*) => { + $crate::tokio_wrapper::tokio_run(async move { $($expr)* }) + }; +} |
