sync_lsp/workspace/
did_change_watched_files.rs1use serde_repr::Deserialize_repr;
9use serde::Deserialize;
10use crate::{Server, TypeProvider};
11use crate::connection::{Endpoint, Callback};
12
13#[derive(Default, Clone)]
14pub(crate) struct DidChangeWatchedFilesOptions;
15
16#[derive(Deserialize, Debug)]
18pub struct FileEvent {
19 pub uri: String,
21 #[serde(rename = "type")]
23 pub r#type: FileChangeType
24}
25
26#[repr(i32)]
28#[derive(Deserialize_repr, Debug)]
29pub enum FileChangeType {
30 Created = 1,
32 Changed = 2,
34 Deleted = 3
36}
37
38#[derive(Deserialize)]
39struct DidChangeWatchedFilesParams {
40 changes: Vec<FileEvent>
41}
42
43impl<T: TypeProvider> Server<T> {
44
45 pub fn on_change_watched_files(&mut self, callback: fn (&mut Server<T>, Vec<FileEvent>)) {
53 self.workspace.did_change_watched_files.set_callback(Callback::notification(move |server, params: DidChangeWatchedFilesParams| {
54 callback(server, params.changes)
55 }))
56 }
57}
58
59impl DidChangeWatchedFilesOptions {
60 pub(super) const METHOD: &'static str = "workspace/didChangeWatchedFiles";
61
62 pub(super) fn endpoint<T: TypeProvider>() -> Endpoint<T, DidChangeWatchedFilesOptions> {
63 Endpoint::<T, DidChangeWatchedFilesOptions>::new(
64 Callback::notification(|_, _: DidChangeWatchedFilesParams| ())
65 )
66 }
67}