Skip to content

Covertness/coap-rs

Repository files navigation

coap-rs

CircleCI 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
  • Block-Wise Transfers RFC 7959
  • DTLS support via webrtc-rs
  • Option to provide custom transports for client and server

Documentation

Installation

First add this to your Cargo.toml:

[dependencies] coap = "0.24" coap-lite = "0.13.3" tokio = {version = "^1.32", features = ["full"]}

Example

Server:

 use coap_lite::{RequestType as Method, CoapRequest}; use coap::Server; use tokio::runtime::Runtime; use std::net::SocketAddr; fn main() { let addr = "127.0.0.1:5683"; Runtime::new().unwrap().block_on(async move { let mut server = Server::new_udp(addr).unwrap(); println!("Server up on {}", addr); server.run(|mut request: Box<CoapRequest<SocketAddr>>| async { 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.clone()).unwrap()), &Method::Put => println!("request by put {}", String::from_utf8(request.message.payload.clone()).unwrap()), _ => println!("request by other method"), }; match request.response { Some(ref mut message) => { message.message.payload = b"OK".to_vec(); }, _ => {} }; return request }).await.unwrap(); }); }

Client:

 use coap_lite::{RequestType as Method, CoapRequest}; use coap::{UdpCoAPClient}; use tokio::main; #[tokio::main] async fn main() { let url = "coap://127.0.0.1:5683/Rust"; println!("Client request: {}", url); let response = UdpCoAPClient::get(url).await.unwrap(); println!("Server reply: {}", String::from_utf8(response.message.payload).unwrap()); }

Benchmark

$ cargo bench

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages