ice-rs 0.3.0

ZeroC Ice for Rust

Build Status


The goal of this project is to support Rust in ZeroC Ice.

Quick Start

This quick start guide will cover a client for the ZeroC Ice Minimal Sample. Create a binary application with cargo new minimal-client and add ice-rs to your [build-dependencies]and [dependencies]. Now add a file with the following content:

Minimal client

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

fn main() -> Result<(), Box<dyn std::error::Error>> {
  let ice_files = vec![
  let root_module = parser::parse_ice_files(&ice_files, "<path/to/ice/include/dir>")?;
  root_module.generate(Path::new("./src/gen"), "")

Now add the following to you

use ice_rs::communicator::Communicator;

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

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?;


Minimal server

Based on the same file you can add a server for the minimal example.

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

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

struct HelloImpl {}

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

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));


The status can be seen in the number of supported ZeroC Ice Demos.

  • Ice/minimal
  • Ice/optional
  • Ice/context (implicit context missing, see Issue)
  • IceGrid/simple

Supported transports:

  • TCP
  • SSL


The main goal is to support all ZeroC Ice Demos.