parol-ls 4.4.0

Language server for parol parser generator
use lsp_server::{RequestId, Response};
use lsp_types::request::{
    CodeActionRequest, DocumentSymbolRequest, Formatting, GotoDefinition, HoverRequest,
    PrepareRenameRequest, Rename, Request,
};

use crate::server::Server;

pub(crate) trait RequestHandler: Request {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response;
}

impl RequestHandler for GotoDefinition {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got gotoDefinition request #{id}: {params:?}");
        let result = server.handle_goto_definition(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for HoverRequest {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got hover request #{id}: {params:?}");
        let result = server.handle_hover(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for DocumentSymbolRequest {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got document symbols request #{id}: {params:?}");
        let result = server.handle_document_symbols(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for PrepareRenameRequest {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got prepare rename request #{id}: {params:?}");
        let result = server.handle_prepare_rename(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for Rename {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got rename request #{id}: {params:?}");
        let result = server.handle_rename(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for Formatting {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got formatting request #{id}: {params:?}");
        let result = server.handle_formatting(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}

impl RequestHandler for CodeActionRequest {
    fn handle(server: &mut Server, id: RequestId, params: Self::Params) -> Response {
        eprintln!("got codeAction request #{id}: {params:?}");
        let result = server.handle_code_action(params);
        let result = serde_json::to_value(result).unwrap();
        Response {
            id,
            result: Some(result),
            error: None,
        }
    }
}