diff --git a/.gitignore b/.gitignore index ebdff5afc..2ac5e62ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -/target +target/ **/*.rs.bk /.idea diff --git a/Cargo.lock b/Cargo.lock index 4d4e93bc9..f6cf5eed5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,28 +39,6 @@ name = "autocfg" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "backtrace" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "bitflags" version = "1.0.4" @@ -80,11 +58,6 @@ dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "cc" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "cfg-if" version = "0.1.7" @@ -166,26 +139,6 @@ name = "either" version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "fnv" version = "1.0.6" @@ -217,92 +170,72 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures-channel-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-core-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "futures-executor-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-channel-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-io-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-preview" -version = "0.3.0-alpha.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures-channel-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-executor-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "futures-select-macro-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-executor-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-sink-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-util-preview" -version = "0.3.0-alpha.14" +version = "0.3.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-select-macro-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -331,7 +264,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", "unindent 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -360,28 +293,21 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "jsonrpc-core" -version = "11.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "jsonrpc" +version = "0.1.0" dependencies = [ - "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_repr 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "jsonrpc-core-client" -version = "11.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "jsonrpc-derive" +version = "0.1.0" dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -523,7 +449,7 @@ name = "num-derive" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -598,19 +524,14 @@ name = "proc-macro-hack" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "proc-macro-nested" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "proc-macro2" -version = "0.4.27" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -621,7 +542,7 @@ name = "quote" version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -761,11 +682,6 @@ dependencies = [ "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustc-demangle" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "rustc_version" version = "0.2.3" @@ -818,7 +734,7 @@ name = "serde_derive" version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -833,6 +749,16 @@ dependencies = [ "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "serde_repr" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "slab" version = "0.4.2" @@ -869,19 +795,8 @@ name = "syn" version = "0.15.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -909,11 +824,11 @@ version = "0.1.0" dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", "indoc 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core-client 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc 0.1.0", + "jsonrpc-derive 0.1.0", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "lsp-types 0.56.0 (registry+https://github.com/rust-lang/crates.io-index)", "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1282,12 +1197,9 @@ dependencies = [ "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" "checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799" -"checksum backtrace 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f106c02a3604afcdc0df5d36cc47b44b55917dbaf3d808f71c163a0ddba64637" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" "checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" "checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)" = "5e5f3fee5eeb60324c2781f1e41286bdee933850fff9b3c672587fed5ec58c83" "checksum cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11d43355396e872eefb45ce6342e4374ed7bc2b3a502d1b28e36d6e23c05d1f4" "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" @@ -1297,29 +1209,24 @@ dependencies = [ "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" "checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" "checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "62941eff9507c8177d448bd83a44d9b9760856e184081d8cd79ba9f03dd24981" -"checksum futures-channel-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "75c0e32aa6f63765b2961e339f49d232e69bbe30cc4f58ab68db44fd8b779ebc" -"checksum futures-core-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6a1f7b199991f589390e5447c71bc1759519cbf139941cc8099629b879e780b2" -"checksum futures-executor-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "1bebf44334e650941048bea25aae02582d64557898e44ae59e905002058afa02" -"checksum futures-io-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dd75add8903d984158d9b27b89e384f871ff359fcd629de3d70f1a32c1bf0b5d" -"checksum futures-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4443b7b07cb01f3e9ad819456b0a9f3625b5dd885e8f8da6141c6b929fc07d" -"checksum futures-select-macro-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "c9c0d15b57c3e4fa7074a03e05ae9a17a3b790d0b308d9939cf26418805f6785" -"checksum futures-sink-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dbbc2bc8aff721d0e5b745a3f8e904e799a5c83372a15779239980c89e2d6cb4" -"checksum futures-util-preview 0.3.0-alpha.14 (registry+https://github.com/rust-lang/crates.io-index)" = "71908da95cfa7454d0e4466865251d5218aa2233217d0f8382d3a58e9bc7d9ac" +"checksum futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "edf150887ba490560f3d732e479a383ca4b8696af98651806d3f4edc1d968585" +"checksum futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "10a3833d58fd08b3a40203613ed3a93c8bc0bc0181af5dd6422a0e08df1bfa68" +"checksum futures-executor-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0a75c64f20734619b4668e87f902544ce8c108dfcb6c9b6b2fcefdd1a848c15a" +"checksum futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "b24891994ce1445f7e0cd494e4f57fd79f5bd9d37e9cc90a31d109e9a06d9073" +"checksum futures-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f5b8da0ac7e67b6341b8c971918f2bb6540f57b06a8644a76edf17dda0728709" +"checksum futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f64fa75a0ce02dee949c8c9447abfc117df214054d6e96755d329c9053baf2fd" +"checksum futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "ca958da50f4073c475d9f7ec6ce405451e06707bfd69686e83abd76cb4e1e7fb" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum indoc 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "730a9283f0eb1a0ee27817121aafc4395ca3dc33779ed2a5a314cbffbf787c19" "checksum indoc-impl 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c5341c89b193926a5251b35a2668b003e8cd05b76372ec0fe5fd6f0552635f69" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" -"checksum jsonrpc-core 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97b83fdc5e0218128d0d270f2f2e7a5ea716f3240c8518a58bc89e6716ba8581" -"checksum jsonrpc-core-client 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c889ca27072f038496a62f38356e8f827acf194d7276030120265362b2974eab" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" @@ -1347,8 +1254,7 @@ dependencies = [ "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" "checksum proc-macro-hack 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6a9bed9ebc40cf53e3a76d7486c54d05002eae6485b2711ab9104476fb2eb8bc" -"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" -"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915" +"checksum proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)" = "64c827cea7a7ab30ce4593e5e04d7a11617ad6ece2fa230605a78b00ff965316" "checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" @@ -1365,7 +1271,6 @@ dependencies = [ "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" "checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ccc78bfd5acd7bf3e89cffcf899e5cb1a52d6fafa8dec2739ad70c9577a57288" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" "checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" @@ -1375,13 +1280,13 @@ dependencies = [ "checksum serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "aa5f7c20820475babd2c077c3ab5f8c77a31c15e16ea38687b4c02d3e48680f4" "checksum serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "58fc82bec244f168b23d1963b45c8bf5726e9a15a9d146a067f9081aeed2de79" "checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum serde_repr 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "29a734c298df0346c4cd5919595981c266dabbf12dc747c85e1a95e96077a52b" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "checksum stderrlog 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "61dc66b7ae72b65636dbf36326f9638fb3ba27871bb737a62e2c309b87d91b70" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" "checksum syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)" = "846620ec526c1599c070eff393bfeeeb88a93afa2513fc3b49f1fea84cf7b0ed" -"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" "checksum termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "adc4587ead41bf016f11af03e55a624c06568b5a19db4e90fde573d805074f83" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" diff --git a/Cargo.toml b/Cargo.toml index 30f453f3a..848ff8dd2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,11 +7,14 @@ authors = [ "Patrick Förster "] edition = "2018" +[workspace] +members = ["./jsonrpc", "./jsonrpc_derive"] + [dependencies] +jsonrpc = { path = "jsonrpc" } +jsonrpc-derive = { path = "jsonrpc_derive" } lsp-types = "0.56.0" -futures-preview = { version = "0.3.0-alpha.14", features = ["compat"] } -jsonrpc-core = "11.0.0" -jsonrpc-core-client = "11.0.0" +futures-preview = { version = "0.3.0-alpha.15", features = ["compat"] } serde = { version = "1.0.90", features = ["derive", "rc"] } serde_json = "1.0.39" tokio = "0.1" diff --git a/jsonrpc/Cargo.lock b/jsonrpc/Cargo.lock new file mode 100644 index 000000000..a2c5f0075 --- /dev/null +++ b/jsonrpc/Cargo.lock @@ -0,0 +1,235 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "futures" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-channel-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-core-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-executor-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-io-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-executor-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-sink-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "futures-util-preview" +version = "0.3.0-alpha.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "jsonrpc" +version = "0.1.0" +dependencies = [ + "futures-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_repr 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pin-utils" +version = "0.1.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro2" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_repr" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "62941eff9507c8177d448bd83a44d9b9760856e184081d8cd79ba9f03dd24981" +"checksum futures-channel-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "edf150887ba490560f3d732e479a383ca4b8696af98651806d3f4edc1d968585" +"checksum futures-core-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "10a3833d58fd08b3a40203613ed3a93c8bc0bc0181af5dd6422a0e08df1bfa68" +"checksum futures-executor-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0a75c64f20734619b4668e87f902544ce8c108dfcb6c9b6b2fcefdd1a848c15a" +"checksum futures-io-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "b24891994ce1445f7e0cd494e4f57fd79f5bd9d37e9cc90a31d109e9a06d9073" +"checksum futures-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f5b8da0ac7e67b6341b8c971918f2bb6540f57b06a8644a76edf17dda0728709" +"checksum futures-sink-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f64fa75a0ce02dee949c8c9447abfc117df214054d6e96755d329c9053baf2fd" +"checksum futures-util-preview 0.3.0-alpha.15 (registry+https://github.com/rust-lang/crates.io-index)" = "ca958da50f4073c475d9f7ec6ce405451e06707bfd69686e83abd76cb4e1e7fb" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum libc 0.2.54 (registry+https://github.com/rust-lang/crates.io-index)" = "c6785aa7dd976f5fbf3b71cfd9cd49d7f783c1ff565a858d71031c6c313aa5c6" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" +"checksum proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)" = "64c827cea7a7ab30ce4593e5e04d7a11617ad6ece2fa230605a78b00ff965316" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "aa5f7c20820475babd2c077c3ab5f8c77a31c15e16ea38687b4c02d3e48680f4" +"checksum serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "58fc82bec244f168b23d1963b45c8bf5726e9a15a9d146a067f9081aeed2de79" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum serde_repr 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "29a734c298df0346c4cd5919595981c266dabbf12dc747c85e1a95e96077a52b" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum syn 0.15.33 (registry+https://github.com/rust-lang/crates.io-index)" = "ec52cd796e5f01d0067225a5392e70084acc4c0013fa71d55166d38a8b307836" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" diff --git a/jsonrpc/Cargo.toml b/jsonrpc/Cargo.toml new file mode 100644 index 000000000..ec47d49b7 --- /dev/null +++ b/jsonrpc/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "jsonrpc" +version = "0.1.0" +authors = [ + "Eric Förster ", + "Patrick Förster "] +edition = "2018" + +[dependencies] +futures-preview = { version = "0.3.0-alpha.15", features = ["compat"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +serde_repr = "0.1" diff --git a/jsonrpc/src/lib.rs b/jsonrpc/src/lib.rs new file mode 100644 index 000000000..4afaf95f7 --- /dev/null +++ b/jsonrpc/src/lib.rs @@ -0,0 +1,36 @@ +#![feature(await_macro, async_await)] + +mod server; +mod types; + +pub use self::server::*; +pub use self::types::*; + +#[macro_export] +macro_rules! handle_message { + ($message:ident, $server:ident) => {{ + use jsonrpc::*; + + let handle = async move |message| { + let message: Message = serde_json::from_str(message).map_err(|_| Error { + code: ErrorCode::ParseError, + message: "Could not parse the input".to_owned(), + data: serde_json::Value::Null, + })?; + + match message { + Message::Request(request) => Ok(Some(await!($server.handle_request(request)))), + Message::Notification(notification) => { + await!($server.handle_notification(notification)); + Ok(None) + } + Message::Response(_) => panic!("Unexpected client response"), + } + }; + + match await!(handle(&$message)) { + Ok(response) => response, + Err(error) => Some(Response::new(serde_json::Value::Null, Some(error), None)), + } + }}; +} diff --git a/jsonrpc/src/server.rs b/jsonrpc/src/server.rs new file mode 100644 index 000000000..96aba2531 --- /dev/null +++ b/jsonrpc/src/server.rs @@ -0,0 +1,136 @@ +use crate::types::*; +use futures::prelude::*; +use serde::de::DeserializeOwned; +use serde::Serialize; +use serde_json::json; + +const DESERIALIZE_OBJECT_ERROR: &str = "Could not deserialize parameter object"; + +pub async fn handle_request<'a, H, F, I, O>(request: Request, handler: H) -> Response +where + H: Fn(I) -> F + Send + Sync + 'a, + F: Future> + Send, + I: DeserializeOwned + Send, + O: Serialize, +{ + let handle = async move |json| -> std::result::Result { + let params: I = serde_json::from_value(json).map_err(|_| Error { + code: ErrorCode::InvalidParams, + message: String::from(DESERIALIZE_OBJECT_ERROR), + data: serde_json::Value::Null, + })?; + + let result = await!(handler(params)).map_err(|message| Error { + code: ErrorCode::InternalError, + message, + data: serde_json::Value::Null, + })?; + + Ok(result) + }; + + match await!(handle(request.params)) { + Ok(result) => Response::new(json!(result), None, Some(request.id)), + Err(error) => Response::new(serde_json::Value::Null, Some(error), Some(request.id)), + } +} + +pub async fn handle_notification<'a, H, F, I>(notification: Notification, handler: H) +where + H: Fn(I) -> F + Send + Sync + 'a, + F: Future + Send, + I: DeserializeOwned + Send, +{ + match serde_json::from_value(notification.params) { + Ok(params) => await!(handler(params)), + Err(_) => panic!(DESERIALIZE_OBJECT_ERROR), + } +} + +#[cfg(test)] +mod tests { + use super::*; + use futures::executor::block_on; + + const JSONRPC_VERSION: &str = "2.0"; + const METHOD_NAME: &str = "foo"; + + async fn increment(i: i32) -> Result { + Ok(i + 1) + } + + async fn panic(_params: ()) { + panic!("success"); + } + + fn setup_request(value: T) -> Request { + Request { + jsonrpc: JSONRPC_VERSION.to_owned(), + params: json!(value), + method: METHOD_NAME.to_owned(), + id: 0, + } + } + + fn setup_notification() -> Notification { + Notification { + jsonrpc: JSONRPC_VERSION.to_owned(), + method: METHOD_NAME.to_owned(), + params: json!(()), + } + } + + #[test] + fn test_request_valid() { + let value = 42; + let request = setup_request(value); + + let response = block_on(handle_request(request.clone(), increment)); + let expected = Response { + jsonrpc: request.jsonrpc, + result: json!(block_on(increment(value)).unwrap()), + error: None, + id: Some(request.id), + }; + + assert_eq!(response, expected); + } + + #[test] + fn test_request_invalid_params() { + let request = setup_request((0, 0)); + + let response = block_on(handle_request(request.clone(), increment)); + let expected = Response { + jsonrpc: request.jsonrpc.clone(), + result: serde_json::Value::Null, + error: Some(Error { + code: ErrorCode::InvalidParams, + message: DESERIALIZE_OBJECT_ERROR.to_owned(), + data: serde_json::Value::Null, + }), + id: Some(request.id), + }; + + assert_eq!(response, expected); + } + + #[test] + #[should_panic(expected = "success")] + fn test_notification_valid() { + let notification = setup_notification(); + block_on(handle_notification(notification, panic)); + } + + #[test] + #[should_panic] + fn test_notification_invalid_params() { + let notification = setup_notification(); + let notification = Notification { + params: json!(0), + ..notification + }; + + block_on(handle_notification(notification, panic)); + } +} diff --git a/jsonrpc/src/types.rs b/jsonrpc/src/types.rs new file mode 100644 index 000000000..2dda7b16c --- /dev/null +++ b/jsonrpc/src/types.rs @@ -0,0 +1,73 @@ +use serde::{Deserialize, Serialize}; +use serde_repr::*; + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize_repr, Serialize_repr)] +#[repr(i32)] +pub enum ErrorCode { + ParseError = -32700, + InvalidRequest = -32600, + MethodNotFound = -32601, + InvalidParams = -32602, + InternalError = -32603, + ServerNotInitialized = -32002, + UnknownErrorCode = -32001, + RequestCancelled = -32800, +} + +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] +pub struct Error { + pub code: ErrorCode, + pub message: String, + + #[serde(skip_serializing_if = "serde_json::Value::is_null")] + pub data: serde_json::Value, +} + +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] +pub struct Request { + pub jsonrpc: String, + pub method: String, + pub params: serde_json::Value, + pub id: i32, +} + +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] +pub struct Response { + pub jsonrpc: String, + + #[serde(skip_serializing_if = "serde_json::Value::is_null")] + pub result: serde_json::Value, + + #[serde(skip_serializing_if = "Option::is_none")] + pub error: Option, + + pub id: Option, +} + +impl Response { + pub fn new(result: serde_json::Value, error: Option, id: Option) -> Self { + Response { + jsonrpc: String::from("2.0"), + result, + error, + id, + } + } +} + +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] +pub struct Notification { + pub jsonrpc: String, + pub method: String, + pub params: serde_json::Value, +} + +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] +#[serde(untagged)] +pub enum Message { + Request(Request), + Response(Response), + Notification(Notification), +} + +pub type Result = std::result::Result; diff --git a/jsonrpc_derive/Cargo.lock b/jsonrpc_derive/Cargo.lock new file mode 100644 index 000000000..87682a06f --- /dev/null +++ b/jsonrpc_derive/Cargo.lock @@ -0,0 +1,6 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "jsonrpc" +version = "0.1.0" + diff --git a/jsonrpc_derive/Cargo.toml b/jsonrpc_derive/Cargo.toml new file mode 100644 index 000000000..5b83d9ec5 --- /dev/null +++ b/jsonrpc_derive/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "jsonrpc-derive" +version = "0.1.0" +authors = [ + "Eric Förster ", + "Patrick Förster "] +edition = "2018" + +[lib] +proc-macro = true + +[dependencies] +syn = { version = "0.15", features = ["full"] } +quote = "0.6" diff --git a/jsonrpc_derive/src/lib.rs b/jsonrpc_derive/src/lib.rs new file mode 100644 index 000000000..3f31e2600 --- /dev/null +++ b/jsonrpc_derive/src/lib.rs @@ -0,0 +1,130 @@ +#![feature(await_macro, async_await)] +#![recursion_limit = "128"] + +extern crate proc_macro; + +use quote::quote; +use syn; + +macro_rules! unwrap { + ($input:expr, $arm:pat => $value:expr) => {{ + match $input { + $arm => $value, + _ => unreachable!(), + } + }}; +} + +#[proc_macro_attribute] +pub fn jsonrpc_server( + _attr: proc_macro::TokenStream, + item: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + let impl_: syn::ItemImpl = syn::parse_macro_input!(item); + let mut requests = Vec::new(); + let mut notifications = Vec::new(); + let methods = &get_methods(&impl_); + for method in methods { + let ident = &method.sig.ident; + let attribute = method.attrs.first().unwrap().clone(); + + let meta = attribute.parse_meta().unwrap(); + let meta_list = unwrap!(meta, syn::Meta::List(x) => x); + let meta_nested = meta_list.nested.first().unwrap(); + let meta_lit = unwrap!(meta_nested.value(), syn::NestedMeta::Literal(x) => x); + let name = unwrap!(meta_lit, syn::Lit::Str(x) => x.value()); + let name_str = name.as_str(); + + if is_request_method(&method) { + requests.push(quote!(#name_str => await!(self.#ident(request)))); + } else { + notifications.push(quote!(#name_str => await!(self.#ident(notification)))); + } + } + + let self_ty = &impl_.self_ty; + let items = &impl_.items; + let result = quote! { + impl #self_ty { + #(#items)* + + pub async fn handle_request(&self, request: jsonrpc::Request) -> jsonrpc::Response { + match request.method.as_str() { + #(#requests),*, + _ => { + let error = jsonrpc::Error { + code: jsonrpc::ErrorCode::MethodNotFound, + message: String::from("Method not found"), + data: serde_json::Value::Null, + }; + + jsonrpc::Response::new(serde_json::Value::Null, Some(error), Some(request.id)) + } + } + } + + pub async fn handle_notification(&self, notification: jsonrpc::Notification) { + match notification.method.as_str() { + #(#notifications),*, + _ => log::warn!("{}: {}", "Method not found", notification.method), + } + } + } + }; + + result.into() +} + +#[proc_macro_attribute] +pub fn jsonrpc_method( + _attr: proc_macro::TokenStream, + item: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + let method: syn::ImplItemMethod = syn::parse_macro_input!(item); + let name = &method.sig.ident; + let block = &method.block; + let param_decl = match &method.sig.decl.inputs[1] { + syn::FnArg::Captured(arg) => arg, + _ => panic!("Could not extract parameter type"), + }; + let param_name = ¶m_decl.pat; + let param_type = ¶m_decl.ty; + let return_ty = &method.sig.decl.output; + + let result = if is_request_method(&method) { + quote! { + pub async fn #name(&self, request: jsonrpc::Request) -> jsonrpc::Response { + let handler = async move |#param_name: #param_type| #return_ty #block; + await!(jsonrpc::handle_request(request, handler)) + } + } + } else { + quote! { + pub async fn #name(&self, notification: jsonrpc::Notification) { + let handler = async move |#param_name: #param_type| #block; + await!(jsonrpc::handle_notification(notification, handler)) + } + } + }; + + result.into() +} + +fn get_methods(impl_: &syn::ItemImpl) -> Vec<&syn::ImplItemMethod> { + let mut methods = Vec::new(); + for item in &impl_.items { + let method = unwrap!(item, syn::ImplItem::Method(x) => x); + if !method.attrs.is_empty() { + methods.push(method); + } + } + + methods +} + +fn is_request_method(method: &syn::ImplItemMethod) -> bool { + match method.sig.decl.output { + syn::ReturnType::Type(_, _) => true, + syn::ReturnType::Default => false, + } +} diff --git a/rust-toolchain b/rust-toolchain index 00bf99e12..f5b136c96 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2019-04-19 \ No newline at end of file +nightly-2019-05-01 \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index df2addc4e..2ef9fe72c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ -#![feature(await_macro, async_await, futures_api)] +#![feature(await_macro, async_await)] +#![recursion_limit = "128"] pub mod build; pub mod completion; @@ -7,8 +8,10 @@ pub mod feature; pub mod folding; pub mod formatting; pub mod highlight; +pub mod hover; pub mod link; pub mod lsp; +pub mod metadata; pub mod range; pub mod reference; pub mod rename; diff --git a/src/lsp/mod.rs b/src/lsp/mod.rs index 4141d4188..06dfca61d 100644 --- a/src/lsp/mod.rs +++ b/src/lsp/mod.rs @@ -1,5 +1,4 @@ mod codec; -mod server; use crate::server::LatexLspServer; use codec::LspCodec; @@ -8,7 +7,7 @@ use futures::executor::ThreadPool; use futures::lock::Mutex; use futures::prelude::*; use futures::task::*; -use server::build_io_handler; +use jsonrpc::handle_message; use std::sync::Arc; use tokio::codec::{FramedRead, FramedWrite}; use tokio::prelude::{AsyncRead, AsyncWrite}; @@ -18,20 +17,19 @@ where I: AsyncRead + Send + Sync + 'static, O: AsyncWrite + Send + Sync + 'static, { - let handler = Arc::new(Mutex::new(build_io_handler(server, pool.clone()))); + let server = Arc::new(server); let mut reader = FramedRead::new(input, LspCodec).compat(); let writer = Arc::new(Mutex::new(FramedWrite::new(output, LspCodec).sink_compat())); while let Some(content) = await!(reader.next()) { let mut pool = pool.clone(); - let handler = Arc::clone(&handler); - let writer = Arc::clone(&writer); + let message = content.expect("Invalid message format"); + let server = Arc::clone(&server); + let writer = Arc::clone(&writer); pool.spawn(async move { - let message = content.expect("Invalid message format"); - let handler = await!(handler.lock()); - - if let Ok(Some(response)) = await!(handler.handle_request(&message).compat()) { + if let Some(response) = handle_message!(message, server) { + let response = serde_json::to_string(&response).unwrap(); let mut writer = await!(writer.lock()); await!(writer.send(response)).expect("Cannot write into output") } diff --git a/src/lsp/server.rs b/src/lsp/server.rs deleted file mode 100644 index cc1e0296c..000000000 --- a/src/lsp/server.rs +++ /dev/null @@ -1,90 +0,0 @@ -use crate::server::LatexLspServer; -use futures::executor::ThreadPool; -use futures::prelude::*; -use futures::task::*; -use jsonrpc_core::{BoxFuture, Compatibility, Error, ErrorCode, IoHandler, Params, Value}; -use serde_json::json; -use std::sync::Arc; - -pub fn build_io_handler(server: LatexLspServer, pool: ThreadPool) -> IoHandler { - let server = Arc::new(server); - let mut handler = IoHandler::with_compatibility(Compatibility::V2); - - macro_rules! add_requests { - ($($name:literal -> $request:path), *) => { - $( - { - let server = Arc::clone(&server); - handler.add_method($name, move |json: Params| -> BoxFuture { - let server = Arc::clone(&server); - let future = async move { - let params = json.parse()?; - let result = await!($request(&*server, params)).map_err(|message| Error { - code: ErrorCode::ServerError(-32000), - message: message.to_owned(), - data: None, - })?; - - Ok(json!(result)) - }; - - Box::new(future.boxed().compat()) - }); - } - )*; - }; - } - - macro_rules! add_notifications { - ($($name:literal -> $request:path), *) => { - $( - { - let server = Arc::clone(&server); - let pool = pool.clone(); - - handler.add_notification($name, move |json: Params| { - let server = Arc::clone(&server); - let mut pool = pool.clone(); - - let task = async move { - match json.parse() { - Ok(params) => await!($request(&*server, params)), - Err(error) => panic!(error), - } - }; - - pool.spawn(task).unwrap(); - }); - } - )*; - }; - } - - add_requests!( - "initialize" -> LatexLspServer::initialize, - "shutdown" -> LatexLspServer::shutdown, - "textDocument/completion" -> LatexLspServer::completion, - "completionItem/resolve" -> LatexLspServer::completion_resolve, - "textDocument/hover" -> LatexLspServer::hover, - "textDocument/definition" -> LatexLspServer::definition, - "textDocument/references" -> LatexLspServer::references, - "textDocument/documentHighlight" -> LatexLspServer::document_highlight, - "textDocument/documentSymbol" -> LatexLspServer::document_symbol, - "textDocument/documentLink" -> LatexLspServer::document_link, - "textDocument/formatting" -> LatexLspServer::formatting, - "textDocument/rename" -> LatexLspServer::rename, - "textDocument/foldingRange" -> LatexLspServer::folding_range - ); - - add_notifications!( - "initialized" -> LatexLspServer::initialized, - "exit" -> LatexLspServer::exit, - "workspace/didChangeWatchedFiles" -> LatexLspServer::did_change_watched_files, - "textDocument/didOpen" -> LatexLspServer::did_open, - "textDocument/didChange" -> LatexLspServer::did_change, - "textDocument/didSave" -> LatexLspServer::did_save, - "textDocument/didClose" -> LatexLspServer::did_close - ); - - handler -} diff --git a/src/main.rs b/src/main.rs index df2bfc7bf..7d3314d8e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -#![feature(await_macro, async_await, futures_api)] +#![feature(await_macro, async_await)] use clap::*; use futures::executor::*; diff --git a/src/server.rs b/src/server.rs index 0bf94fcea..bf25f0214 100644 --- a/src/server.rs +++ b/src/server.rs @@ -9,24 +9,26 @@ use crate::reference::ReferenceProvider; use crate::rename::RenameProvider; use crate::request; use crate::workspace::WorkspaceActor; +use jsonrpc::Result; +use jsonrpc_derive::{jsonrpc_method, jsonrpc_server}; use log::*; use lsp_types::*; use serde::{Deserialize, Serialize}; use std::sync::Arc; use walkdir::WalkDir; -type LspResult = Result; - pub struct LatexLspServer { workspace: Arc, } +#[jsonrpc_server] impl LatexLspServer { pub fn new(workspace: Arc) -> Self { LatexLspServer { workspace } } - pub async fn initialize(&self, params: InitializeParams) -> LspResult { + #[jsonrpc_method("initialize")] + pub async fn initialize(&self, params: InitializeParams) -> Result { if let Some(Ok(path)) = params.root_uri.map(|x| x.to_file_path()) { for entry in WalkDir::new(path) .into_iter() @@ -90,20 +92,26 @@ impl LatexLspServer { Ok(InitializeResult { capabilities }) } + #[jsonrpc_method("initialized")] pub async fn initialized(&self, params: InitializedParams) {} - pub async fn shutdown(&self, params: ()) -> LspResult<()> { + #[jsonrpc_method("shutdown")] + pub async fn shutdown(&self, params: ()) -> Result<()> { Ok(()) } + #[jsonrpc_method("exit")] pub async fn exit(&self, params: ()) {} + #[jsonrpc_method("workspace/didChangeWatchedFiles")] pub async fn did_change_watched_files(&self, params: DidChangeWatchedFilesParams) {} + #[jsonrpc_method("textDocument/didOpen")] pub async fn did_open(&self, params: DidOpenTextDocumentParams) { await!(self.workspace.add(params.text_document)); } + #[jsonrpc_method("textDocument/didChange")] pub async fn did_change(&self, params: DidChangeTextDocumentParams) { for change in params.content_changes { let uri = params.text_document.uri.clone(); @@ -111,11 +119,14 @@ impl LatexLspServer { } } + #[jsonrpc_method("textDocument/didSave")] pub async fn did_save(&self, params: DidSaveTextDocumentParams) {} + #[jsonrpc_method("textDocument/didClose")] pub async fn did_close(&self, params: DidCloseTextDocumentParams) {} - pub async fn completion(&self, params: CompletionParams) -> LspResult { + #[jsonrpc_method("textDocument/completion")] + pub async fn completion(&self, params: CompletionParams) -> Result { let request = request!(self, params)?; let items = await!(CompletionProvider::execute(&request)); let all_includes = items.iter().all(|item| { @@ -128,59 +139,69 @@ impl LatexLspServer { }) } - pub async fn completion_resolve(&self, item: CompletionItem) -> LspResult { + #[jsonrpc_method("completionItem/resolve")] + pub async fn completion_resolve(&self, item: CompletionItem) -> Result { Ok(item) } - pub async fn hover(&self, params: TextDocumentPositionParams) -> LspResult> { + #[jsonrpc_method("textDocument/hover")] + pub async fn hover(&self, params: TextDocumentPositionParams) -> Result> { let request = request!(self, params)?; let hover = await!(HoverProvider::execute(&request)); Ok(hover) } - pub async fn definition(&self, params: TextDocumentPositionParams) -> LspResult> { + #[jsonrpc_method("textDocument/definition")] + pub async fn definition(&self, params: TextDocumentPositionParams) -> Result> { let request = request!(self, params)?; let results = await!(DefinitionProvider::execute(&request)); Ok(results) } - pub async fn references(&self, params: ReferenceParams) -> LspResult> { + #[jsonrpc_method("textDocument/references")] + pub async fn references(&self, params: ReferenceParams) -> Result> { let request = request!(self, params)?; let results = await!(ReferenceProvider::execute(&request)); Ok(results) } + #[jsonrpc_method("textDocument/documentHighlight")] pub async fn document_highlight( &self, params: TextDocumentPositionParams, - ) -> LspResult> { + ) -> Result> { Ok(Vec::new()) } + #[jsonrpc_method("textDocument/documentSymbol")] pub async fn document_symbol( &self, params: DocumentSymbolParams, - ) -> LspResult> { + ) -> Result> { Ok(Vec::new()) } - pub async fn document_link(&self, params: DocumentLinkParams) -> LspResult> { + #[jsonrpc_method("textDocument/documentLink")] + pub async fn document_link(&self, params: DocumentLinkParams) -> Result> { let request = request!(self, params)?; let links = await!(LinkProvider::execute(&request)); Ok(links) } - pub async fn formatting(&self, params: DocumentFormattingParams) -> LspResult> { + #[jsonrpc_method("textDocument/formatting")] + pub async fn formatting(&self, params: DocumentFormattingParams) -> Result> { Ok(Vec::new()) } - pub async fn rename(&self, params: RenameParams) -> LspResult> { + #[jsonrpc_method("textDocument/rename")] + pub async fn rename(&self, params: RenameParams) -> Result> { let request = request!(self, params)?; let edit = await!(RenameProvider::execute(&request)); Ok(edit) } - pub async fn folding_range(&self, params: FoldingRangeParams) -> LspResult> { + #[jsonrpc_method("textDocument/foldingRange")] + pub async fn folding_range(&self, params: FoldingRangeParams) -> Result> { let request = request!(self, params)?; let foldings = await!(FoldingProvider::execute(&request)); Ok(foldings)