Skip to content

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

License

Notifications You must be signed in to change notification settings

Covertness/coap-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a394ed9 · Jan 17, 2025
Jun 19, 2022
Dec 14, 2024
Apr 3, 2024
Apr 7, 2024
Dec 14, 2024
Jan 5, 2024
Jul 3, 2016
Jan 17, 2025
Oct 18, 2019
Oct 28, 2024
Jan 5, 2024
Aug 28, 2023

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.19"
coap-lite = "0.11.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