#json-rpc-client #rpc-client #rpc

bin+lib elite-rpc

Type Safe JSON RPC like client with different transport and protocols layers

4 releases

0.0.4 Oct 4, 2024
0.0.3 Oct 4, 2024
0.0.2 Oct 4, 2024
0.0.1 Jun 19, 2024

#82 in #json-rpc-client

Download history 8/week @ 2024-09-14 6/week @ 2024-09-21 264/week @ 2024-09-28 162/week @ 2024-10-05 32/week @ 2024-10-12 2/week @ 2024-10-19 9/week @ 2024-11-02

51 downloads per month

Apache-2.0

15KB
224 lines

Elite RPC

Type Safe JSON RPC like client with different transport and protocol layers.

Overview

This library provides a type-safe JSON RPC client implementation for Rust, supporting various transport layers. It is designed to be simple to use while ensuring safety and reliability through Rust's strong type system.

Features

  • Type-safe JSON RPC client implementation
  • Support for multiple transport layers
  • Easy to use and integrate into your projects

Installation

Add this to your Cargo.toml:

[dependencies]
elite-rpc = "0.0.1"

Usage

Here's a simple example of how to use the library:

use elite_rpc::Client;

use elite_rpc::protocol::Protocol;
use elite_rpc::transport::Transport;
use elite_rpc::EliteRPC;

pub struct MockTransport;
#[derive(Clone)]
pub struct MockProtocol;

impl Transport<MockProtocol> for MockTransport {
    fn new(_: &str, _: MockProtocol) -> anyhow::Result<Self>
    where
        Self: Sized,
    {
        Ok(Self)
    }

    fn call(
        &self,
        _: &str,
        _: &<MockProtocol as Protocol>::InnerType,
    ) -> anyhow::Result<<MockProtocol as Protocol>::InnerType> {
        Ok(())
    }
}

impl Protocol for MockProtocol {
    type InnerType = ();

    fn from_from_request(
        &self,
        _: &[u8],
        _: Option<crate::protocol::Encoding>,
    ) -> anyhow::Result<Self::InnerType> {
        Ok(())
    }

    fn new() -> anyhow::Result<Self>
    where
        Self: Sized,
    {
        Ok(MockProtocol)
    }

    fn to_request(&self, _: &str, _: &Self::InnerType) -> anyhow::Result<Self::InnerType> {
        Ok(())
    }
}

fn main() {
    let rpc = EliteRPC::<MockTransport, MockProtocol>::new("http://localhost:8545")?;
    let response = rpc.call("method_name", &())?;
    assert_eq!(response, ());
}

Replace "http://localhost:8545", "method_name", and the parameters with your actual JSON RPC endpoint and method.

License

Type Safe JSON RPC like client with different transport and protocol layers.

Copyright (C) 2024 Vincenzo Palazzo vincenzopalazzodev@gmail.com

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Dependencies

~0.6–9MB
~87K SLoC