use std::path::PathBuf;
use async_trait::async_trait;
use ls_types::{Diagnostic, MessageType, Uri};
use serde_json::Value;
use crate::config::ServerSettings;
use crate::semantic::types::{LiveMetadataSnapshot, WorkspaceIndex};
#[async_trait]
pub trait LspNotifier: Send + Sync + 'static {
async fn publish_diagnostics(&self, uri: Uri, diagnostics: Vec<Diagnostic>);
async fn log_message(&self, level: MessageType, message: String);
async fn request_configuration(&self) -> Option<Value>;
}
#[async_trait]
pub trait WorkspaceLoader: Send + Sync + 'static {
async fn load(&self, folders: &[PathBuf]) -> WorkspaceIndex;
async fn read_document(&self, uri: &Uri) -> Option<String>;
}
#[async_trait]
pub trait MetadataProvider: Send + Sync + 'static {
async fn fetch(&self, settings: &ServerSettings) -> LiveMetadataSnapshot;
}