use async_trait::async_trait;
use crate::error::Result;
use crate::r#ref::OciRef;
#[async_trait]
pub trait OciResolver: Send + Sync {
async fn resolve_digest(&self, image: &OciRef) -> Result<String>;
async fn exists(&self, image: &OciRef) -> Result<bool>;
async fn list_tags(&self, image: &OciRef, limit: Option<usize>) -> Result<Vec<String>>;
}
#[async_trait]
pub trait OciPromoter: Send + Sync {
async fn promote(&self, source: &OciRef, target: &OciRef, force: bool) -> Result<()>;
}