#bindings #ffi #zeromq #low-level #zmq-pw

sys zmq-pw-sys

Low-level bindings to the zeromq library

8 releases

Uses old Rust 2015

0.9.8 Aug 2, 2017
0.9.7 Jul 21, 2017
0.9.5 Jun 26, 2017

#32 in #zeromq


Used in 3 crates (via zmq-pw)

MIT/Apache

2MB
42K SLoC

C++ 32K SLoC // 0.2% comments Visual Studio Project 5K SLoC M4 1.5K SLoC // 0.3% comments Visual Studio Solution 1K SLoC Automake 858 SLoC // 0.0% comments C 786 SLoC // 0.0% comments Shell 445 SLoC // 0.2% comments Rust 436 SLoC // 0.0% comments Forge Config 255 SLoC // 0.9% comments RPM Specfile 151 SLoC // 0.1% comments Batch 95 SLoC // 0.1% comments Bitbake 50 SLoC

Contains (obscure autoconf code, 25KB) libzmq-pw/configure.ac

Rust ZeroMQ bindings.

Travis Build Status Appveyor Build status Coverage Status Apache 2.0 licensed MIT licensed docs

Documentation

Release Notes

Installation

Currently, rust-zmq requires ZeroMQ 3.2 or newer. For example, on recent Debian-based distributions, you can use the following command to get the prerequiste headers and library installed:

apt install libzmq3-dev

If your OS of choice does not provide packages of a new-enough libzmq, you will first have to install it from source; see https://github.com/zeromq/libzmq/releases.

rust-zmq uses cargo to install. Users should add this to their Cargo.toml file:

[dependencies]
zmq = "0.8"

The build normally uses pkg-config to find out about libzmq's location. If that is not available, the environment variable LIBZMQ_PREFIX (or alternatively, LIBZMQ_LIB_DIR and LIBZMQ_INCLUDE_DIR) can be defined to avoid the invocation of pkg-config.

Usage

rust-zmq is a pretty straight forward port of the C API into Rust:

extern crate zmq;

fn main() {
    let ctx = zmq::Context::new();

    let mut socket = ctx.socket(zmq::REQ).unwrap();
    socket.connect("tcp://127.0.0.1:1234").unwrap();
    socket.send_str("hello world!", 0).unwrap();
}

You can find more usage examples in https://github.com/erickt/rust-zmq/tree/master/examples.

Contributing

Install for contributing to rust-zmq:

% git clone https://github.com/erickt/rust-zmq
% cd rust-zmq
% cargo build

Note that the master branch is currently in API-breaking mode while we try to make the API more ergomic and flexible for the 0.9 release series.

This means that pull requests (e.g. bugfixes), which do not need to break API should be submitted for the release/v0.8 branch. This also applies to new features, if they can be implemented in an API-compatible way, the pull request should also aim for release/v0.8. Please submit an issue for missing features before you start coding, so the suitable branch and other potential questions can be clarified up-front.

The reason for using branches, and thus increasing overhead a bit for all involved, is that it's not yet clear how long it will take to reach a point in master that we feel comfortable with releasing as 0.9.0, as we'd like to have the core part of the API more-or-less fixed by then. Using the release/v0.8 branch we can deliver bugfixes and smaller features in the meantime without forcing users to follow master's changing API and to continuously adjust their code to API changes.

Dependencies