use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::Result;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub path: String,
pub name: Option<String>,
pub include_pattern: Option<String>,
pub exclude_pattern: Option<String>,
}
#[async_trait]
pub trait RootManager: Send + Sync {
fn list_roots(&self) -> Vec<Root>;
fn add_root(&mut self, root: Root) -> Result<()>;
fn remove_root(&mut self, path: &str) -> Result<()>;
async fn get_context(&self, path: &str) -> Result<Value>;
}