use cita_cloud_proto::client::{InterceptedSvc, StorageClientTrait};
use cita_cloud_proto::retry::RetryClient;
use cita_cloud_proto::status_code::StatusCodeEnum;
use cita_cloud_proto::storage::storage_service_client::StorageServiceClient;
use cita_cloud_proto::storage::{Content, ExtKey};
pub async fn store_data(
client: RetryClient<StorageServiceClient<InterceptedSvc>>,
region: u32,
key: Vec<u8>,
value: Vec<u8>,
) -> StatusCodeEnum {
let content = Content { region, key, value };
match client.store(content.clone()).await {
Ok(code) => StatusCodeEnum::from(code),
Err(e) => {
warn!("store_data({:?}) failed: {}", content, e.to_string());
StatusCodeEnum::StorageServerNotReady
}
}
}
pub async fn load_data(
client: RetryClient<StorageServiceClient<InterceptedSvc>>,
region: u32,
key: Vec<u8>,
) -> Result<Vec<u8>, StatusCodeEnum> {
let ext_key = ExtKey { region, key };
let value = client.load(ext_key.clone()).await.map_err(|e| {
warn!("load_data({:?}) failed: {}", ext_key, e.to_string());
StatusCodeEnum::StorageServerNotReady
})?;
StatusCodeEnum::from(value.status.ok_or(StatusCodeEnum::NoneStatusCode)?).is_success()?;
Ok(value.value)
}