Documentation
extern crate coap;

use coap::{CoAPServer, CoAPClient, CoAPRequest, CoAPResponse, CoAPOption};
use coap::IsMessage;

fn request_handler(request: CoAPRequest) -> Option<CoAPResponse> {
    let uri_path = request.get_option(CoAPOption::UriPath).unwrap();

    return match request.response {
        Some(mut response) => {
            response.set_payload(uri_path.front().unwrap().clone());
            Some(response)
        }
        _ => None,
    };
}

fn main() {
    let mut server = CoAPServer::new("127.0.0.1:5683").unwrap();
    server.handle(request_handler).unwrap();

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

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