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

40 lines
888 B
Rust

#![deny(rust_2018_idioms)]
use tracing::{debug, info};
use tracing_attributes::instrument;
#[instrument]
fn nth_fibonacci(n: u64) -> u64 {
if n == 0 || n == 1 {
debug!("Base case");
1
} else {
debug!("Recursing");
nth_fibonacci(n - 1) + nth_fibonacci(n - 2)
}
}
#[instrument]
fn fibonacci_seq(to: u64) -> Vec<u64> {
let mut sequence = vec![];
for n in 0..=to {
debug!("Pushing {n} fibonacci", n = n);
sequence.push(nth_fibonacci(n));
}
sequence
}
fn main() {
let subscriber = tracing_fmt::FmtSubscriber::builder()
.with_filter(tracing_fmt::filter::EnvFilter::from("args=trace"))
.finish();
tracing::subscriber::with_default(subscriber, || {
let n = 5;
let sequence = fibonacci_seq(n);
info!("The first {} fibonacci numbers are {:?}", n, sequence);
})
}