MCPcopy Create free account
hub / github.com/csskit/csskit / new

Method new

crates/csskit_lsp/src/server.rs:51–94  ·  view source on GitHub ↗
(handler: T)

Source from the content-addressed store, hash-verified

49
50impl Server {
51 pub fn new<T: Handler>(handler: T) -> Self {
52 let (write_sender, write_receiver) = bounded::<Message>(0);
53 let (read_sender, read_receiver) = bounded::<Message>(0);
54
55 let handler_receiver = read_receiver.clone();
56 let handler_sender = write_sender.clone();
57 let trace_level = Arc::new(RwLock::new(LevelFilter::OFF));
58 let level_set = trace_level.clone();
59 let request_handler = Builder::new()
60 .name("LspMessageHandler".into())
61 .spawn(move || {
62 while let Ok(message) = handler_receiver.recv() {
63 trace!("LspMessageHandler -> {:#?}", &message);
64 if let Message::Notification(Notification { method, params }) = &message {
65 if method == "exit" {
66 break;
67 }
68 if method == "$/setTrace" {
69 let level = from_value::<SetTraceParams>(params.clone())
70 .map(|p| match p.value {
71 lsp_types::TraceValue::Off => LevelFilter::OFF,
72 lsp_types::TraceValue::Messages => LevelFilter::WARN,
73 lsp_types::TraceValue::Verbose => LevelFilter::TRACE,
74 })
75 .unwrap_or(LevelFilter::OFF);
76 trace!("Changing level to {:?}", level);
77 let mut level_set = level_set.write().unwrap();
78 *level_set = level;
79 }
80 }
81 let response = handler.handle(message);
82 if let Some(response) = response
83 && let Err(e) = handler_sender.send(response)
84 {
85 warn!("Handler failed to send response {:?}", &e);
86 return Err(io::Error::other(e));
87 }
88 }
89 warn!("LspMessageHandler closing, channel closed");
90 Ok(())
91 })
92 .expect("Failed to create Reader");
93 Server { write_sender, write_receiver, read_sender, read_receiver, request_handler, trace_level }
94 }
95
96 pub fn tracer(&self) -> TracingLayer {
97 TracingLayer::new(self.trace_level.clone(), self.write_sender.clone())

Callers

nothing calls this directly

Calls 5

ErrClass · 0.85
cloneMethod · 0.80
handleMethod · 0.80
nameMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected