use crate::context::RequestContext;
use crate::error::Result;
use crate::protocol::{Resource, ResourceContents, ResourceTemplate};
use async_trait::async_trait;
#[async_trait]
pub trait ResourceProvider: Send + Sync {
async fn list_resources(
&self,
cursor: Option<&str>,
ctx: &RequestContext,
) -> Result<(Vec<Resource>, Option<String>)>;
async fn read_resource(&self, uri: &str, ctx: &RequestContext)
-> Result<Vec<ResourceContents>>;
async fn list_templates(&self, _ctx: &RequestContext) -> Result<Vec<ResourceTemplate>> {
Ok(vec![])
}
async fn subscribe(&self, _uri: &str, _ctx: &RequestContext) -> Result<()> {
Ok(())
}
async fn unsubscribe(&self, _uri: &str, _ctx: &RequestContext) -> Result<()> {
Ok(())
}
}