observability 0.1.3

Experimental tracing ideas
Documentation
use observability::{span_context, OpenSpanExt};
use std::{env, error::Error};
use tokio::net::UdpSocket;
use tracing::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    observability::test_run_open().ok();
    let addr = env::args()
        .nth(1)
        .unwrap_or_else(|| "127.0.0.1:8080".to_string());

    let mut socket = UdpSocket::bind(&addr).await?;
    println!("Listening on: {}", socket.local_addr()?);

    {
        let mut buf = vec![0; 1024];
        let (size, peer) = socket.recv_from(&mut buf).await?;

        let data = buf[..size].to_vec();
        let span = debug_span!("server recv");
        span.set_from_bytes(data);
        let _g = span.enter();
        span_context!(span, Level::DEBUG);
        let span = debug_span!("inner 1");
        let _g = span.enter();
        span_context!(span, Level::DEBUG);
        let span = debug_span!("inner 2");
        let _g = span.enter();
        span_context!(span, Level::DEBUG);
        let data = span.get_context_bytes();
        let _amt = socket.send_to(&data[..], &peer).await?;
    }

    {
        let mut buf = vec![0; 1024];
        let (size, peer) = socket.recv_from(&mut buf).await?;

        let data = buf[..size].to_vec();
        let span = debug_span!("server recv 2");
        span.set_from_bytes(data);
        let _g = span.enter();
        span_context!(span, Level::DEBUG);
        let data = span.get_context_bytes();
        let _amt = socket.send_to(&data[..], &peer).await?;
    }
    Ok(())
}