use std::sync::Arc;
use lsp_types::{InitializeParams, Uri, WorkspaceFolder};
#[derive(Debug, Clone, Default)]
pub struct Workspace {
inner: Arc<WorkspaceState>,
}
#[derive(Debug, Default)]
struct WorkspaceState {
root_uri: Option<Uri>,
folders: Vec<WorkspaceFolder>,
}
impl Workspace {
pub(crate) fn from_params(params: &InitializeParams) -> Self {
#[allow(deprecated)] let root_uri = params.root_uri.clone();
Self {
inner: Arc::new(WorkspaceState {
root_uri,
folders: params.workspace_folders.clone().unwrap_or_default(),
}),
}
}
pub fn root_uri(&self) -> Option<&Uri> {
self.inner.root_uri.as_ref()
}
pub fn folders(&self) -> &[WorkspaceFolder] {
&self.inner.folders
}
}