use async_trait::async_trait;
use iii_helpers::stream::{
StreamDeleteInput, StreamDeleteResult, StreamGetInput, StreamListGroupsInput, StreamListInput,
StreamSetInput, StreamSetResult, StreamUpdateInput, StreamUpdateResult,
};
use serde_json::Value;
use crate::error::Error;
#[async_trait]
pub trait IStream: Send + Sync + 'static {
async fn get(&self, input: StreamGetInput) -> Result<Option<Value>, Error>;
async fn set(&self, input: StreamSetInput) -> Result<Option<StreamSetResult>, Error>;
async fn delete(&self, input: StreamDeleteInput) -> Result<StreamDeleteResult, Error>;
async fn list(&self, input: StreamListInput) -> Result<Vec<Value>, Error>;
async fn list_groups(&self, input: StreamListGroupsInput) -> Result<Vec<String>, Error>;
async fn update(&self, input: StreamUpdateInput) -> Result<Option<StreamUpdateResult>, Error>;
}