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
First add this to your Cargo.toml:
[dependencies] coap = "0.24" coap-lite = "0.13.3" tokio = {version = "^1.32", features = ["full"]} 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(); }); } 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()); }$ cargo bench