#![doc = "Transport-independent service interface for local and remote calls."]
use async_trait::async_trait;
use spiral_contract::auth::AuthHeader;
use spiral_contract::call::CallError;
use crate::api::storage::objects::*;
#[async_trait]
pub trait StorageApi: Send + Sync + 'static {
async fn create_mount(
&self,
auth_header: AuthHeader,
project_id: String,
request: CreateMountRequest,
) -> Result<CreateMountResponse, CallError<StorageError>>;
async fn issue_mount_token(
&self,
auth_header: AuthHeader,
mount_id: String,
request: IssueMountTokenRequest,
) -> Result<IssueMountTokenResponse, CallError<StorageError>>;
async fn list_mounts(
&self,
auth_header: AuthHeader,
project_id: String,
request: PageRequest,
) -> Result<MountPage, CallError<StorageError>>;
async fn list_mounts_global(
&self,
auth_header: AuthHeader,
request: GlobalMountsRequest,
) -> Result<MountPage, CallError<StorageError>>;
async fn list_volumes(
&self,
auth_header: AuthHeader,
request: PageRequest,
) -> Result<VolumePage, CallError<StorageError>>;
async fn read_mount(
&self,
auth_header: AuthHeader,
mount_id: String,
) -> Result<Mount, CallError<StorageError>>;
async fn read_mount_storage(
&self,
auth_header: AuthHeader,
mount_id: String,
) -> Result<GetMountAndFileSystemResponse, CallError<StorageError>>;
async fn read_project_storage(
&self,
auth_header: AuthHeader,
project_id: String,
) -> Result<ProjectStorageView, CallError<StorageError>>;
async fn register_volume(
&self,
auth_header: AuthHeader,
request: RegisterVolumeRequest,
) -> Result<VolumeView, CallError<StorageError>>;
async fn remove_mount(
&self,
auth_header: AuthHeader,
mount_id: String,
) -> Result<(), CallError<StorageError>>;
async fn select_project_storage(
&self,
auth_header: AuthHeader,
project_id: String,
request: ProjectStorage,
) -> Result<ProjectStorageView, CallError<StorageError>>;
async fn test_volume(
&self,
auth_header: AuthHeader,
volume_id: String,
) -> Result<TestVolumeResponse, CallError<StorageError>>;
async fn update_volume_credential(
&self,
auth_header: AuthHeader,
volume_id: String,
request: UpdateVolumeCredentialRequest,
) -> Result<VolumeView, CallError<StorageError>>;
async fn update_volume_status(
&self,
auth_header: AuthHeader,
volume_id: String,
request: UpdateVolumeStatusRequest,
) -> Result<VolumeView, CallError<StorageError>>;
}