4 Commits

Author SHA1 Message Date
Bhargav Voleti
cacbe06138 Add proxy server example
* Plus the echo example from tokio for a concurrent echo server
2019-08-25 13:47:22 -07:00
Eliza Weisman
30c62e02a1
examples: update to use Rust 2018 idioms (#271)
## Motivation

`tracing` is built with Rust's 2018 edition, but some examples use
outdated idioms. Ideally, examples would show code using the currently
preferred idioms. This improves clarity, especially for newer Rust
programmers who may not be familiar with the idioms of earlier editions.
 
## Solution

This branch updates all the examples to use Rust 2018 edition idioms,
and adds `deny` attributes to prevent the use of outdated idioms.

* deny rust 2018 idiom lints in examples
* examples: update to use Rust 2018 idioms
* examples: remove most uses of `extern crate`

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2019-08-13 11:56:54 -07:00
Eliza Weisman
d9f7858185
attributes: prepare the instrument macro to release (#251)
## Motivation

In order to re-export the `#[instrument]` attribute macro in `tracing`,
it must be released to crates.io. There are some changes that needed to
be made prior to releasing the procedural macro crate.

## Solution

This branch makes the following changes:

- Rename the attribute macro from `trace` to `instrument` (see #246)
- Add support for setting a verbosity level (see #250)
- Add support for setting a target
- Rename the `tracing-proc-macros` crate to `tracing-attributes`
- Add documentation + a README
- Update Cargo.toml metadata

The crate should now be ready to publish and re-export from `tracing`.

Fixes: #246 
Fixes: #250
Refs: #245

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2019-08-08 15:41:27 -07:00
Eliza Weisman
93565c5b9c
proc-macros: add proper support for async fn (#244)
## Motivation

The `tracing-proc-macros` crate provides an attribute macro that
instruments a function. When an instrumented function is called, a span
with the function's name and parameters is created and entered for the
duration of the call. However, this does not currently handle 
`async fn`s properly --- the correct behaviour would be to instrument
 the _future_ created by the async function.

## Solution

This branch updates the attribute macro to properly handle async
functions. This is done by expanding the function body inside of an
async block, using the `tracing-futures::Instrument` combinator on that
block, and `await`ing the instrumented block. This should function
equivalently to the un-instrumented function, but with the addition that
the `Instrumented` combinator future will ensure that the generated span
is entered every time the async block's future is polled.

Since we build and test `tracing` on stable Rust, a `nightly` feature
flag is required to enable support for `async fn`s. If the attribute is
added to an async fn without that feature enabled, we will generate a
compiler error that indicates that this feature should be enabled.

I've also added examples and tests for instrumenting `async fn`s. These
are in their own separate workspaces so that they do not break 
`cargo test --all` on stable.

Closes #6 
Fixes #162

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2019-08-07 19:56:03 -07:00