JSON-RPC and LSP

From bibbleWiki
Revision as of 02:47, 29 March 2025 by Iwiseman (talk | contribs) (Iwiseman moved page JSON-RPC to JSON-RPC and LSP)
Jump to navigation Jump to search

Introduction

This is probably the quickest thing to put my nose into. So here goes with rust

Rust Example

To get going we need

[dependencies]
jsonrpc-core = "18.0.0"
jsonrpc-http-server = "18.0.0"
serde_json = "1.0.140"

And here is the code. Not must to discuss. The ServerBuilder I thought was pretty cool.

fn main() {
    let mut io = IoHandler::default();

    io.add_method("say_hello", |_params: Params| async {
        Ok( Value::String("Hello, world!".to_string()))
    });

    io.add_method("add", |params: Params| async {
        let tuple = params.parse::<(i32, i32)>();
        match tuple {
            Ok((a, b)) => Ok(Value::Number((a + b).into())),
            Err(_) => Err(jsonrpc_core::Error::invalid_params("Invalid parameters")),
            
        }
    });
   
    let server = ServerBuilder::new(io)
    .threads(3)
    .start_http(&"0.0.0.0:8003".parse().unwrap())
    .unwrap();

    println!("Server is up");

    server.wait();
}

And finally the JSON to send

{
  "jsonrpc": "2.0",
  "method": "add",
  "params": [10,12],
  "id": 1
}

And the no surprises response.

{
    "jsonrpc": "2.0",
    "result": 22,
    "id": 1
}

And in error (provided it is valid json)

{
    "jsonrpc": "2.0",
    "error": {
        "code": -32602,
        "message": "Invalid parameters"
    },
    "id": 1
}

With invalid json there is no id

{
    "jsonrpc": "2.0",
    "error": {
        "code": -32700,
        "message": "Parse error"
    },
    "id": null
}