coap-rs

Travis Build Status Windows Build Status Downloads Coverage Status MIT licensed

A fast and stable Constrained Application Protocol(CoAP) library implemented in Rust.

Features: - CoAP core protocol RFC 7252 - CoAP Observe option RFC 7641 - Too Many Requests Response Code RFC 8516

Documentation

Installation

First add this to your Cargo.toml:

toml [dependencies] coap = "0.9"

Example

Server:

```rust

![feature(async_closure)]

use coap_lite::{RequestType as Method}; use coap::Server; use tokio::runtime::Runtime;

fn main() { let addr = "127.0.0.1:5683";

Runtime::new().unwrap().block_on(async move {
    let mut server = Server::new(addr).unwrap();
    println!("Server up on {}", addr);

    server.run(async move |request| {
        match request.get_method() {
            &Method::Get => println!("request by get {}", request.get_path()),
            &Method::Post => println!("request by post {}", String::from_utf8(request.message.payload).unwrap()),
            &Method::Put => println!("request by put {}", String::from_utf8(request.message.payload).unwrap()),
            _ => println!("request by other method"),
        };

        return match request.response {
            Some(mut message) => {
                message.message.payload = b"OK".to_vec();
                Some(message)
            },
            _ => None
        };
    }).await.unwrap();
});

} ```

Client:

```rust use coap::CoAPClient;

fn main() { let url = "coap://127.0.0.1:5683/Rust"; println!("Client request: {}", url);

let response = CoAPClient::get(url).unwrap();
println!("Server reply: {}", String::from_utf8(response.message.payload).unwrap());

} ```

Benchmark

bash $ cargo bench