use futures_core::future::BoxFuture;
use std::future::Future;
use std::time::Duration;
use tokio::runtime::Handle;
use ve_tos_rust_sdk::common::{init_tracing_log, Tag};
use ve_tos_rust_sdk::asynchronous::bucket::BucketAPI;
use ve_tos_rust_sdk::asynchronous::tos;
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;
use ve_tos_rust_sdk::bucket::{PutBucketLifecycleInput, LifecycleRule, Expiration, Transition};
use ve_tos_rust_sdk::enumeration::{StatusType, StorageClassType};
use ve_tos_rust_sdk::error::TosError;
#[derive(Debug, Default)]
pub struct TokioRuntime {}
#[async_trait::async_trait]
impl AsyncRuntime for TokioRuntime {
type JoinError = tokio::task::JoinError;
async fn sleep(&self, duration: Duration) {
tokio::time::sleep(duration).await;
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>
F: Future + Send + 'static,
F::Output: Send + 'static,
Box::pin(Handle::current().spawn(future))
fn block_on<F: Future>(&self, future: F) -> F::Output {
Handle::current().block_on(future)
let _guard = init_tracing_log("info", "temp/logs", "app.log");
let ak = env::var("TOS_ACCESS_KEY").unwrap_or("".to_string());
let sk = env::var("TOS_SECRET_KEY").unwrap_or("".to_string());
let endpoint = "https://tos-cn-beijing.volces.com";
let region = "cn-beijing";
let client = tos::builder::<TokioRuntime>()
.connection_timeout(3000)
let bucket_name = "example-bucket";
let mut rule = LifecycleRule::new("expire-logs-rule".to_string());
rule.set_prefix("logs/".to_string());
rule.set_status(StatusType::StatusEnabled);
rule.set_expiration(Expiration::new_with_days(30isize));
let mut transitions = Vec::new();
let mut transition = Transition::new(StorageClassType::StorageClassIa);
transition.set_days(10isize);
transitions.push(transition);
rule.set_transitions(transitions);
let mut tags = Vec::new();
let tag = Tag::new("key", "value");
let input = PutBucketLifecycleInput::new_with_rules(bucket_name, vec![rule]);
match client.put_bucket_lifecycle(&input).await {
Ok(output) => println!("Success: Request ID = {}", output.request_id()),
TosError::TosClientError { message, .. } => println!("Client Error: {}", message),
TosError::TosServerError { request_id, ec, code,.. } => println!("Server Error: Request ID = {}, EC={} ,Code = {}", request_id, ec, code)