#ice #rpc #zeroc

bin+lib ice-rs

ZeroC Ice for Rust

17 个版本

0.3.0 2021 年 3 月 24 日
0.2.2 2021 年 3 月 12 日
0.2.1 2021 年 2 月 5 日
0.1.14 2021 年 1 月 26 日
0.1.3 2020 年 12 月 22 日

#ice 中排名第 17

每月下载量 36 次

GPL-2.0 许可证

175KB
4K SLoC

Build Status

ice-rs

本项目的目标是支持 Rust 在 ZeroC Ice 中。

快速入门

本快速入门指南将涵盖 ZeroC Ice Minimal Sample 的客户端。使用 cargo new minimal-client 创建一个二进制应用程序,并将 ice-rs 添加到您的 [build-dependencies][dependencies] 中。现在添加一个 build.rs 文件,内容如下

最小客户端

use ice_rs::slice::parser;
use std::path::Path;

fn main() -> Result<(), Box<dyn std::error::Error>> {
  println!("cargo:rerun-if-changed=build.rs");
  let ice_files = vec![
      String::from("<path/to/Hello.ice>")
  ];
  let root_module = parser::parse_ice_files(&ice_files, "<path/to/ice/include/dir>")?;
  root_module.generate(Path::new("./src/gen"), "")
}

现在将以下内容添加到您的 main.rs

use ice_rs::communicator::Communicator;

mod gen;
use crate::gen::demo::{Hello,HelloPrx};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let mut comm = Communicator::new().await?;
    let proxy = comm.string_to_proxy("hello:default -h localhost -p 10000").await?;
    let mut hello_prx = HelloPrx::checked_cast(proxy).await?;

    hello_prx.say_hello(None).await
}

最小服务器

基于相同的 build.rs 文件,您可以为最小示例添加一个服务器。

use ice_rs::communicator::Communicator;
use std::collections::HashMap;
use async_trait::async_trait;

mod gen;
use crate::gen::demo::{HelloServer, HelloI};

struct HelloImpl {}

#[async_trait]
impl HelloI for HelloImpl {
    async fn say_hello(&mut self, _context: Option<HashMap<String, String>>) -> ()
    {
        println!("Hello World!");
        ()
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let comm = Communicator::new().await?;
    let mut adapter = comm.create_object_adapter_with_endpoint("hello", "tcp -h localhost -p 10000").await?;

    let hello_server = HelloServer::new(Box::new(HelloImpl{}));

    adapter.add("hello", Box::new(hello_server));
    adapter.activate().await?;
    
    Ok(())
}

状态

状态可以通过支持的 ZeroC Ice Demos 的数量来查看。

  • Ice/minimal
  • Ice/optional
  • Ice/context (缺少隐式上下文,见 问题)
  • IceGrid/simple

支持的传输方式

  • TCP
  • SSL

路线图

主要目标是支持所有 ZeroC Ice Demos

依赖项

~11–20MB
~263K SLoC