From 84fb9b44c3b06e1a542608570bb6d7212c8505b7 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Wed, 1 Apr 2020 13:11:26 +0800 Subject: Introduce ra_proc_macro_srv --- crates/ra_proc_macro_srv/src/main.rs | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 crates/ra_proc_macro_srv/src/main.rs (limited to 'crates/ra_proc_macro_srv/src/main.rs') diff --git a/crates/ra_proc_macro_srv/src/main.rs b/crates/ra_proc_macro_srv/src/main.rs new file mode 100644 index 000000000..54ce0224d --- /dev/null +++ b/crates/ra_proc_macro_srv/src/main.rs @@ -0,0 +1,53 @@ +use ra_proc_macro::msg::{self, Message}; +use ra_proc_macro_srv::{expand_task, list_macros}; + +use std::io; + +fn read_request() -> Result, io::Error> { + let stdin = io::stdin(); + let mut stdin = stdin.lock(); + msg::Request::read(&mut stdin) +} + +fn write_response(res: Result) -> Result<(), io::Error> { + let msg: msg::Response = match res { + Ok(res) => res, + Err(err) => msg::Response::Error(msg::ResponseError { + code: msg::ErrorCode::ExpansionError, + message: err, + }), + }; + + let stdout = io::stdout(); + let mut stdout = stdout.lock(); + msg.write(&mut stdout) +} +fn main() { + loop { + let req = match read_request() { + Err(err) => { + eprintln!("Read message error on ra_proc_macro_srv: {}", err.to_string()); + continue; + } + Ok(None) => continue, + Ok(Some(req)) => req, + }; + + match req { + msg::Request::ListMacro(task) => { + if let Err(err) = + write_response(list_macros(&task).map(|it| msg::Response::ListMacro(it))) + { + eprintln!("Write message error on list macro: {}", err); + } + } + msg::Request::ExpansionMacro(task) => { + if let Err(err) = + write_response(expand_task(&task).map(|it| msg::Response::ExpansionMacro(it))) + { + eprintln!("Write message error on expansion macro: {}", err); + } + } + } + } +} -- cgit v1.2.3 From 9a2114b0dd6d3292216fa4d05e3c4cd219633f4b Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 3 Apr 2020 19:16:54 +0800 Subject: Add doc comment on main.rs --- crates/ra_proc_macro_srv/src/main.rs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'crates/ra_proc_macro_srv/src/main.rs') diff --git a/crates/ra_proc_macro_srv/src/main.rs b/crates/ra_proc_macro_srv/src/main.rs index 54ce0224d..70743c1f4 100644 --- a/crates/ra_proc_macro_srv/src/main.rs +++ b/crates/ra_proc_macro_srv/src/main.rs @@ -1,3 +1,5 @@ +//! Driver for proc macro server + use ra_proc_macro::msg::{self, Message}; use ra_proc_macro_srv::{expand_task, list_macros}; -- cgit v1.2.3