use crate::StorageError;
use async_trait::async_trait;
use cid::Cid;
#[async_trait(?Send)]
pub trait PinApi {
async fn add(&mut self, cid: &Cid, options: PinOptions) -> Result<(), StorageError>;
async fn remove(&mut self, cid: &Cid) -> Result<(), StorageError>;
async fn is_pinned(&self, cid: &Cid) -> Option<PinKind>;
async fn iter(&self) -> Box<dyn Iterator<Item = (Cid, PinKind)>>;
}
#[derive(Debug, Default, Clone)]
pub struct PinOptions {
pub kind: PinKind,
}
#[derive(Debug, Default, Clone)]
pub enum PinKind {
#[default]
Recursive,
Direct,
Indirect,
}