Repository: cloudflare/foundations (language: rust)

Issue:
Dependency issues running the `http_server` example in the `3.0.1` release
I've been out of the rust loop for about a year, so this may be a silly problem. But to get the example to compile, I had to update the cargo.toml to 

```
tokio = { version = "1.36.0", features = ["full"]}
```

That addressed the `tokio::main` compiler issue.  But I'm also having trouble with serde traits:

```
error[E0277]: the trait bound `std::sync::Arc<std::string::String>: Serialize` is not satisfied
    --> examples/http_server/metrics.rs:5:1
     |
5    | #[metrics]
     | ^^^^^^^^^^ the trait `Serialize` is not implemented for `std::sync::Arc<std::string::String>`
...
8    |     pub fn active_connections(endpoint_name: &Arc<String>) -> Gauge;
     |                               ------------- required by a bound introduced by this call
     |
     = help: the following other types implement trait `Serialize`:
               bool
               char
               isize
               i8
               i16
               i32
               i64
               i128
             and 172 others
note: required by a bound in `SerializeStruct::serialize_field`
    --> /Users/nsmc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.196/src/ser/mod.rs:1865:12
     |
1859 |     fn serialize_field<T: ?Sized>(
     |        --------------- required by a bound in this associated function
...
1865 |         T: Serialize;
     |            ^^^^^^^^^ required by this bound in `SerializeStruct::serialize_field`
```

Normally when I see this, I feel like I'm missing a `use serde_derive:Serialize` somewhere.  

I'm running the example with this per the comments:  `cargo run --example http_server` inside the `/examples` directory


Discussion / hints:
This seems to be similar to https://github.com/cloudflare/foundations/issues/5. Turns out `serde` indeed requires an `rc` feature for `Serialize` implementation on `Arc`. Apparently it's transitively enabled by one of dependencies and gets fixed by one of the dependencies of `full` tokio in your case.

The question is the same as with the aforementioned ticket: why we don't see it neither in CI, nor locally on our side. Could you provide info about your system: OS, rustc version and whether you used fresh checkout or made some modifications.

cc @Noah-Kennedy 
Thank you for the fast response!  Based on your question, I blew away my checkout and started from scratch.  When I run the example from the `/examples` dir (ie, `cd examples; cargo run --example http_server`), I get the the `Serialize`  and `tokio` errors.  When I run it from the root of the project, it builds and runs just fine.

For the record, here are my versions:

```
Darwin NATHANs-MacBook-Pro.local 23.3.0 Darwin Kernel Version 23.3.0: Wed Dec 20 21:30:44 PST 2023; root:xnu-10002.81.5~7/RELEASE_ARM64_T6000 arm64

rustc 1.76.0 (07dca489a 2024-02-04)

Fresh checkout at the the HEAD of main

```

The easiest fix for this is probably to just add a note in the http_server main.rs that the example command should be run from the project root.  



Love what you guys are doing, btw.  Building all the dependencies bespoke for each project is tedious and error prone.  The features you all are packaging are phenomenal out of the box.
When checked out to the HEAD of `main`, this is my `cargo tree` when running from `/examples`:

```examples v3.2.1 (/Users/nsmc/RustroverProjects/foundations/examples)
[dev-dependencies]
├── anyhow v1.0.79
│   └── backtrace v0.3.69
│       ├── addr2line v0.21.0
│       │   └── gimli v0.28.1
│       ├── cfg-if v1.0.0
│       ├── libc v0.2.153
│       ├── miniz_oxide v0.7.2
│       │   └── adler v1.0.2
│       ├── object v0.32.2
│       │   └── memchr v2.7.1
│       └── rustc-demangle v0.1.23
│       [build-dependencies]
│       └── cc v1.0.83
│           └── libc v0.2.153
├── foundations v3.2.1 (/Users/nsmc/RustroverProjects/foundations/foundations)
│   ├── anyhow v1.0.79 (*)
│   ├── clap v4.5.0
│   │   └── clap_builder v4.5.0
│   │       ├── anstream v0.6.11
│   │       │   ├── anstyle v1.0.6
│   │       │   ├── anstyle-parse v0.2.3
│   │       │   │   └── utf8parse v0.2.1
│   │       │   ├── anstyle-query v1.0.2
│   │       │   ├── colorchoice v1.0.0
│   │       │   └── utf8parse v0.2.1
│   │       ├── anstyle v1.0.6
│   │       ├── clap_lex v0.7.0
│   │       └── strsim v0.11.0
│   ├── crossbeam-channel v0.5.11
│   │   └── crossbeam-utils v0.8.19
│   ├── erased-serde v0.3.31
│   │   └── serde v1.0.196
│   │       └── serde_derive v1.0.196 (proc-macro)
│   │           ├── proc-macro2 v1.0.78
│   │           │   └── unicode-ident v1.0.12
│   │           ├── quote v1.0.35
│   │           │   └── proc-macro2 v1.0.78 (*)
│   │           └── syn v2.0.48
│   │               ├── proc-macro2 v1.0.78 (*)
│   │               ├── quote v1.0.35 (*)
│   │               └── unicode-ident v1.0.12
│   ├── foundations-macros v3.2.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros)
│   │   ├── darling v0.14.4
│   │   │   ├── darling_core v0.14.4
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   ├── ident_case v1.0.1
│   │   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   │   ├── quote v1.0.35 (*)
│   │   │   │   ├── strsim v0.10.0
│   │   │   │   └── syn v1.0.109
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── unicode-ident v1.0.12
│   │   │   └── darling_macro v0.14.4 (proc-macro)
│   │   │       ├── darling_core v0.14.4 (*)
│   │   │       ├── quote v1.0.35 (*)
│   │   │       └── syn v1.0.109 (*)
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   └── syn v1.0.109 (*)
│   ├── futures-util v0.3.30
│   │   ├── futures-channel v0.3.30
│   │   │   ├── futures-core v0.3.30
│   │   │   └── futures-sink v0.3.30
│   │   ├── futures-core v0.3.30
│   │   ├── futures-io v0.3.30
│   │   ├── futures-macro v0.3.30 (proc-macro)
│   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   ├── quote v1.0.35 (*)
│   │   │   └── syn v2.0.48 (*)
│   │   ├── futures-sink v0.3.30
│   │   ├── futures-task v0.3.30
│   │   ├── memchr v2.7.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── pin-utils v0.1.0
│   │   └── slab v0.4.9
│   │       [build-dependencies]
│   │       └── autocfg v1.1.0
│   ├── governor v0.6.0
│   │   ├── cfg-if v1.0.0
│   │   ├── dashmap v5.5.3
│   │   │   ├── cfg-if v1.0.0
│   │   │   ├── hashbrown v0.14.3
│   │   │   ├── lock_api v0.4.11
│   │   │   │   └── scopeguard v1.2.0
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── once_cell v1.19.0
│   │   │   └── parking_lot_core v0.9.9
│   │   │       ├── cfg-if v1.0.0
│   │   │       ├── libc v0.2.153
│   │   │       └── smallvec v1.13.1
│   │   ├── futures v0.3.30
│   │   │   ├── futures-channel v0.3.30 (*)
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-executor v0.3.30
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-task v0.3.30
│   │   │   │   └── futures-util v0.3.30 (*)
│   │   │   ├── futures-io v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-task v0.3.30
│   │   │   └── futures-util v0.3.30 (*)
│   │   ├── futures-timer v3.0.2
│   │   ├── no-std-compat v0.4.1
│   │   ├── nonzero_ext v0.3.0
│   │   ├── parking_lot v0.12.1
│   │   │   ├── lock_api v0.4.11 (*)
│   │   │   └── parking_lot_core v0.9.9 (*)
│   │   ├── quanta v0.11.1
│   │   │   ├── crossbeam-utils v0.8.19
│   │   │   ├── mach2 v0.4.2
│   │   │   │   └── libc v0.2.153
│   │   │   └── once_cell v1.19.0
│   │   ├── rand v0.8.5
│   │   │   ├── libc v0.2.153
│   │   │   ├── rand_chacha v0.3.1
│   │   │   │   ├── ppv-lite86 v0.2.17
│   │   │   │   └── rand_core v0.6.4
│   │   │   │       └── getrandom v0.2.12
│   │   │   │           ├── cfg-if v1.0.0
│   │   │   │           └── libc v0.2.153
│   │   │   └── rand_core v0.6.4 (*)
│   │   └── smallvec v1.13.1
│   ├── hyper v0.14.28
│   │   ├── bytes v1.5.0
│   │   ├── futures-channel v0.3.30 (*)
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── http v0.2.11
│   │   │   ├── bytes v1.5.0
│   │   │   ├── fnv v1.0.7
│   │   │   └── itoa v1.0.10
│   │   ├── http-body v0.4.6
│   │   │   ├── bytes v1.5.0
│   │   │   ├── http v0.2.11 (*)
│   │   │   └── pin-project-lite v0.2.13
│   │   ├── httparse v1.8.0
│   │   ├── httpdate v1.0.3
│   │   ├── itoa v1.0.10
│   │   ├── pin-project-lite v0.2.13
│   │   ├── socket2 v0.5.5
│   │   │   └── libc v0.2.153
│   │   ├── tokio v1.36.0
│   │   │   ├── libc v0.2.153
│   │   │   ├── mio v0.8.10
│   │   │   │   └── libc v0.2.153
│   │   │   ├── pin-project-lite v0.2.13
│   │   │   └── socket2 v0.5.5 (*)
│   │   ├── tower-service v0.3.2
│   │   ├── tracing v0.1.40
│   │   │   ├── pin-project-lite v0.2.13
│   │   │   └── tracing-core v0.1.32
│   │   │       └── once_cell v1.19.0
│   │   └── want v0.3.1
│   │       └── try-lock v0.2.5
│   ├── indexmap v2.2.3
│   │   ├── equivalent v1.0.1
│   │   ├── hashbrown v0.14.3
│   │   └── serde v1.0.196 (*)
│   ├── once_cell v1.19.0
│   ├── parking_lot v0.12.1 (*)
│   ├── prometheus v0.13.3
│   │   ├── cfg-if v1.0.0
│   │   ├── fnv v1.0.7
│   │   ├── lazy_static v1.4.0
│   │   ├── libc v0.2.153
│   │   ├── memchr v2.7.1
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── thiserror v1.0.57
│   │       └── thiserror-impl v1.0.57 (proc-macro)
│   │           ├── proc-macro2 v1.0.78 (*)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v2.0.48 (*)
│   ├── prometheus-client v0.18.1
│   │   ├── dtoa v1.0.9
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── prometheus-client-derive-text-encode v0.3.0 (proc-macro)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v1.0.109 (*)
│   ├── prometools v0.2.1
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── prometheus-client v0.18.1 (*)
│   │   ├── ryu v1.0.16
│   │   └── serde v1.0.196 (*)
│   ├── rand v0.8.5 (*)
│   ├── routerify v3.0.0
│   │   ├── http v0.2.11 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── lazy_static v1.4.0
│   │   ├── percent-encoding v2.3.1
│   │   └── regex v1.10.3
│   │       ├── regex-automata v0.4.5
│   │       │   └── regex-syntax v0.8.2
│   │       └── regex-syntax v0.8.2
│   ├── rustracing v0.6.0
│   │   ├── backtrace v0.3.69 (*)
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── rand v0.8.5 (*)
│   │   └── trackable v1.3.0
│   │       └── trackable_derive v1.0.0 (proc-macro)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v1.0.109 (*)
│   ├── rustracing_jaeger v0.9.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── hostname v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── match_cfg v0.1.0
│   │   ├── local-ip-address v0.5.7
│   │   │   ├── libc v0.2.153
│   │   │   └── thiserror v1.0.57 (*)
│   │   ├── percent-encoding v2.3.1
│   │   ├── rand v0.8.5 (*)
│   │   ├── rustracing v0.6.0 (*)
│   │   ├── thrift_codec v0.2.0
│   │   │   ├── byteorder v1.5.0
│   │   │   └── trackable v1.3.0 (*)
│   │   └── trackable v1.3.0 (*)
│   ├── serde v1.0.196 (*)
│   ├── serde_path_to_error v0.1.15
│   │   ├── itoa v1.0.10
│   │   └── serde v1.0.196 (*)
│   ├── serde_with v3.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_derive v1.0.196 (proc-macro) (*)
│   │   └── serde_with_macros v3.6.1 (proc-macro)
│   │       ├── darling v0.20.5
│   │       │   ├── darling_core v0.20.5
│   │       │   │   ├── fnv v1.0.7
│   │       │   │   ├── ident_case v1.0.1
│   │       │   │   ├── proc-macro2 v1.0.78 (*)
│   │       │   │   ├── quote v1.0.35 (*)
│   │       │   │   ├── strsim v0.10.0
│   │       │   │   └── syn v2.0.48 (*)
│   │       │   └── darling_macro v0.20.5 (proc-macro)
│   │       │       ├── darling_core v0.20.5 (*)
│   │       │       ├── quote v1.0.35 (*)
│   │       │       └── syn v2.0.48 (*)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v2.0.48 (*)
│   ├── serde_yaml v0.8.26
│   │   ├── indexmap v1.9.3
│   │   │   └── hashbrown v0.12.3
│   │   │   [build-dependencies]
│   │   │   └── autocfg v1.1.0
│   │   ├── ryu v1.0.16
│   │   ├── serde v1.0.196 (*)
│   │   └── yaml-rust v0.4.5
│   │       └── linked-hash-map v0.5.6
│   ├── slog v2.7.0
│   ├── slog-async v2.8.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── slog v2.7.0
│   │   ├── take_mut v0.2.2
│   │   └── thread_local v1.1.7
│   │       ├── cfg-if v1.0.0
│   │       └── once_cell v1.19.0
│   ├── slog-json v2.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_json v1.0.113
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── slog v2.7.0
│   │   └── time v0.3.34
│   │       ├── deranged v0.3.11
│   │       │   └── powerfmt v0.2.0
│   │       ├── itoa v1.0.10
│   │       ├── libc v0.2.153
│   │       ├── num-conv v0.1.0
│   │       ├── num_threads v0.1.6
│   │       │   └── libc v0.2.153
│   │       ├── powerfmt v0.2.0
│   │       ├── time-core v0.1.2
│   │       └── time-macros v0.2.17 (proc-macro)
│   │           ├── num-conv v0.1.0
│   │           └── time-core v0.1.2
│   ├── slog-term v2.9.0
│   │   ├── atty v0.2.14
│   │   │   └── libc v0.2.153
│   │   ├── slog v2.7.0
│   │   ├── term v0.7.0
│   │   │   └── dirs-next v2.0.0
│   │   │       ├── cfg-if v1.0.0
│   │   │       └── dirs-sys-next v0.1.2
│   │   │           └── libc v0.2.153
│   │   ├── thread_local v1.1.7 (*)
│   │   └── time v0.3.34 (*)
│   ├── socket2 v0.5.5 (*)
│   ├── thread_local v1.1.7 (*)
│   ├── tikv-jemallocator v0.5.4
│   │   ├── libc v0.2.153
│   │   └── tikv-jemalloc-sys v0.5.4+5.3.0-patched
│   │       └── libc v0.2.153
│   │       [build-dependencies]
│   │       └── cc v1.0.83 (*)
│   ├── tokio v1.36.0 (*)
│   └── yaml-merge-keys v0.5.1
│       ├── lazy_static v1.4.0
│       ├── serde_yaml v0.8.26 (*)
│       ├── thiserror v1.0.57 (*)
│       └── yaml-rust v0.4.5 (*)
│   [build-dependencies]
│   ├── bindgen v0.68.1
│   │   ├── bitflags v2.4.2
│   │   ├── cexpr v0.6.0
│   │   │   └── nom v7.1.3
│   │   │       ├── memchr v2.7.1
│   │   │       └── minimal-lexical v0.2.1
│   │   ├── clang-sys v1.7.0
│   │   │   ├── glob v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── libloading v0.8.1
│   │   │       └── cfg-if v1.0.0
│   │   │   [build-dependencies]
│   │   │   └── glob v0.3.1
│   │   ├── lazy_static v1.4.0
│   │   ├── lazycell v1.3.0
│   │   ├── peeking_take_while v0.1.2
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   ├── regex v1.10.3
│   │   │   ├── regex-automata v0.4.5
│   │   │   │   └── regex-syntax v0.8.2
│   │   │   └── regex-syntax v0.8.2
│   │   ├── rustc-hash v1.1.0
│   │   ├── shlex v1.3.0
│   │   └── syn v2.0.48 (*)
│   └── cc v1.0.83 (*)
├── futures-util v0.3.30 (*)
├── hyper v0.14.28 (*)
└── tokio v1.36.0 (*)
```

Here it is running it from the project root:

```
 !  ~/R/foundations   …  cargo tree                                                                                                                                                                 Tue Feb 13 09:02:02 2024
examples v3.2.1 (/Users/nsmc/RustroverProjects/foundations/examples)
[dev-dependencies]
├── anyhow v1.0.79
│   └── backtrace v0.3.69
│       ├── addr2line v0.21.0
│       │   └── gimli v0.28.1
│       ├── cfg-if v1.0.0
│       ├── libc v0.2.153
│       ├── miniz_oxide v0.7.2
│       │   └── adler v1.0.2
│       ├── object v0.32.2
│       │   └── memchr v2.7.1
│       └── rustc-demangle v0.1.23
│       [build-dependencies]
│       └── cc v1.0.83
│           └── libc v0.2.153
├── foundations v3.2.1 (/Users/nsmc/RustroverProjects/foundations/foundations)
│   ├── anyhow v1.0.79 (*)
│   ├── clap v4.5.0
│   │   └── clap_builder v4.5.0
│   │       ├── anstream v0.6.11
│   │       │   ├── anstyle v1.0.6
│   │       │   ├── anstyle-parse v0.2.3
│   │       │   │   └── utf8parse v0.2.1
│   │       │   ├── anstyle-query v1.0.2
│   │       │   ├── colorchoice v1.0.0
│   │       │   └── utf8parse v0.2.1
│   │       ├── anstyle v1.0.6
│   │       ├── clap_lex v0.7.0
│   │       └── strsim v0.11.0
│   ├── crossbeam-channel v0.5.11
│   │   └── crossbeam-utils v0.8.19
│   ├── erased-serde v0.3.31
│   │   └── serde v1.0.196
│   │       └── serde_derive v1.0.196 (proc-macro)
│   │           ├── proc-macro2 v1.0.78
│   │           │   └── unicode-ident v1.0.12
│   │           ├── quote v1.0.35
│   │           │   └── proc-macro2 v1.0.78 (*)
│   │           └── syn v2.0.48
│   │               ├── proc-macro2 v1.0.78 (*)
│   │               ├── quote v1.0.35 (*)
│   │               └── unicode-ident v1.0.12
│   ├── foundations-macros v3.2.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros)
│   │   ├── darling v0.14.4
│   │   │   ├── darling_core v0.14.4
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   ├── ident_case v1.0.1
│   │   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   │   ├── quote v1.0.35 (*)
│   │   │   │   ├── strsim v0.10.0
│   │   │   │   └── syn v1.0.109
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── unicode-ident v1.0.12
│   │   │   └── darling_macro v0.14.4 (proc-macro)
│   │   │       ├── darling_core v0.14.4 (*)
│   │   │       ├── quote v1.0.35 (*)
│   │   │       └── syn v1.0.109 (*)
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   └── syn v1.0.109 (*)
│   ├── futures-util v0.3.30
│   │   ├── futures-channel v0.3.30
│   │   │   ├── futures-core v0.3.30
│   │   │   └── futures-sink v0.3.30
│   │   ├── futures-core v0.3.30
│   │   ├── futures-io v0.3.30
│   │   ├── futures-macro v0.3.30 (proc-macro)
│   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   ├── quote v1.0.35 (*)
│   │   │   └── syn v2.0.48 (*)
│   │   ├── futures-sink v0.3.30
│   │   ├── futures-task v0.3.30
│   │   ├── memchr v2.7.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── pin-utils v0.1.0
│   │   └── slab v0.4.9
│   │       [build-dependencies]
│   │       └── autocfg v1.1.0
│   ├── governor v0.6.0
│   │   ├── cfg-if v1.0.0
│   │   ├── dashmap v5.5.3
│   │   │   ├── cfg-if v1.0.0
│   │   │   ├── hashbrown v0.14.3
│   │   │   ├── lock_api v0.4.11
│   │   │   │   └── scopeguard v1.2.0
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── once_cell v1.19.0
│   │   │   └── parking_lot_core v0.9.9
│   │   │       ├── cfg-if v1.0.0
│   │   │       ├── libc v0.2.153
│   │   │       └── smallvec v1.13.1
│   │   ├── futures v0.3.30
│   │   │   ├── futures-channel v0.3.30 (*)
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-executor v0.3.30
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-task v0.3.30
│   │   │   │   └── futures-util v0.3.30 (*)
│   │   │   ├── futures-io v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-task v0.3.30
│   │   │   └── futures-util v0.3.30 (*)
│   │   ├── futures-timer v3.0.2
│   │   ├── no-std-compat v0.4.1
│   │   ├── nonzero_ext v0.3.0
│   │   ├── parking_lot v0.12.1
│   │   │   ├── lock_api v0.4.11 (*)
│   │   │   └── parking_lot_core v0.9.9 (*)
│   │   ├── quanta v0.11.1
│   │   │   ├── crossbeam-utils v0.8.19
│   │   │   ├── mach2 v0.4.2
│   │   │   │   └── libc v0.2.153
│   │   │   └── once_cell v1.19.0
│   │   ├── rand v0.8.5
│   │   │   ├── libc v0.2.153
│   │   │   ├── rand_chacha v0.3.1
│   │   │   │   ├── ppv-lite86 v0.2.17
│   │   │   │   └── rand_core v0.6.4
│   │   │   │       └── getrandom v0.2.12
│   │   │   │           ├── cfg-if v1.0.0
│   │   │   │           └── libc v0.2.153
│   │   │   └── rand_core v0.6.4 (*)
│   │   └── smallvec v1.13.1
│   ├── hyper v0.14.28
│   │   ├── bytes v1.5.0
│   │   ├── futures-channel v0.3.30 (*)
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── h2 v0.3.24
│   │   │   ├── bytes v1.5.0
│   │   │   ├── fnv v1.0.7
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-util v0.3.30 (*)
│   │   │   ├── http v0.2.11
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   └── itoa v1.0.10
│   │   │   ├── indexmap v2.2.3
│   │   │   │   ├── equivalent v1.0.1
│   │   │   │   ├── hashbrown v0.14.3
│   │   │   │   └── serde v1.0.196 (*)
│   │   │   ├── slab v0.4.9 (*)
│   │   │   ├── tokio v1.36.0
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── libc v0.2.153
│   │   │   │   ├── mio v0.8.10
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   ├── num_cpus v1.16.0
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   ├── pin-project-lite v0.2.13
│   │   │   │   ├── socket2 v0.5.5
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   └── tokio-macros v2.2.0 (proc-macro)
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── syn v2.0.48 (*)
│   │   │   ├── tokio-util v0.7.10
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-sink v0.3.30
│   │   │   │   ├── pin-project-lite v0.2.13
│   │   │   │   ├── tokio v1.36.0 (*)
│   │   │   │   └── tracing v0.1.40
│   │   │   │       ├── pin-project-lite v0.2.13
│   │   │   │       └── tracing-core v0.1.32
│   │   │   │           └── once_cell v1.19.0
│   │   │   └── tracing v0.1.40 (*)
│   │   ├── http v0.2.11 (*)
│   │   ├── http-body v0.4.6
│   │   │   ├── bytes v1.5.0
│   │   │   ├── http v0.2.11 (*)
│   │   │   └── pin-project-lite v0.2.13
│   │   ├── httparse v1.8.0
│   │   ├── httpdate v1.0.3
│   │   ├── itoa v1.0.10
│   │   ├── pin-project-lite v0.2.13
│   │   ├── socket2 v0.5.5 (*)
│   │   ├── tokio v1.36.0 (*)
│   │   ├── tower-service v0.3.2
│   │   ├── tracing v0.1.40 (*)
│   │   └── want v0.3.1
│   │       └── try-lock v0.2.5
│   ├── indexmap v2.2.3 (*)
│   ├── once_cell v1.19.0
│   ├── parking_lot v0.12.1 (*)
│   ├── prometheus v0.13.3
│   │   ├── cfg-if v1.0.0
│   │   ├── fnv v1.0.7
│   │   ├── lazy_static v1.4.0
│   │   ├── libc v0.2.153
│   │   ├── memchr v2.7.1
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── thiserror v1.0.57
│   │       └── thiserror-impl v1.0.57 (proc-macro)
│   │           ├── proc-macro2 v1.0.78 (*)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v2.0.48 (*)
│   ├── prometheus-client v0.18.1
│   │   ├── dtoa v1.0.9
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── prometheus-client-derive-text-encode v0.3.0 (proc-macro)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v1.0.109 (*)
│   ├── prometools v0.2.1
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── prometheus-client v0.18.1 (*)
│   │   ├── ryu v1.0.16
│   │   └── serde v1.0.196 (*)
│   ├── rand v0.8.5 (*)
│   ├── routerify v3.0.0
│   │   ├── http v0.2.11 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── lazy_static v1.4.0
│   │   ├── percent-encoding v2.3.1
│   │   └── regex v1.10.3
│   │       ├── aho-corasick v1.1.2
│   │       │   └── memchr v2.7.1
│   │       ├── memchr v2.7.1
│   │       ├── regex-automata v0.4.5
│   │       │   ├── aho-corasick v1.1.2 (*)
│   │       │   ├── memchr v2.7.1
│   │       │   └── regex-syntax v0.8.2
│   │       └── regex-syntax v0.8.2
│   ├── rustracing v0.6.0
│   │   ├── backtrace v0.3.69 (*)
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── rand v0.8.5 (*)
│   │   └── trackable v1.3.0
│   │       └── trackable_derive v1.0.0 (proc-macro)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v1.0.109 (*)
│   ├── rustracing_jaeger v0.9.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── hostname v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── match_cfg v0.1.0
│   │   ├── local-ip-address v0.5.7
│   │   │   ├── libc v0.2.153
│   │   │   └── thiserror v1.0.57 (*)
│   │   ├── percent-encoding v2.3.1
│   │   ├── rand v0.8.5 (*)
│   │   ├── rustracing v0.6.0 (*)
│   │   ├── thrift_codec v0.2.0
│   │   │   ├── byteorder v1.5.0
│   │   │   └── trackable v1.3.0 (*)
│   │   └── trackable v1.3.0 (*)
│   ├── serde v1.0.196 (*)
│   ├── serde_path_to_error v0.1.15
│   │   ├── itoa v1.0.10
│   │   └── serde v1.0.196 (*)
│   ├── serde_with v3.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_derive v1.0.196 (proc-macro) (*)
│   │   └── serde_with_macros v3.6.1 (proc-macro)
│   │       ├── darling v0.20.5
│   │       │   ├── darling_core v0.20.5
│   │       │   │   ├── fnv v1.0.7
│   │       │   │   ├── ident_case v1.0.1
│   │       │   │   ├── proc-macro2 v1.0.78 (*)
│   │       │   │   ├── quote v1.0.35 (*)
│   │       │   │   ├── strsim v0.10.0
│   │       │   │   └── syn v2.0.48 (*)
│   │       │   └── darling_macro v0.20.5 (proc-macro)
│   │       │       ├── darling_core v0.20.5 (*)
│   │       │       ├── quote v1.0.35 (*)
│   │       │       └── syn v2.0.48 (*)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v2.0.48 (*)
│   ├── serde_yaml v0.8.26
│   │   ├── indexmap v1.9.3
│   │   │   └── hashbrown v0.12.3
│   │   │   [build-dependencies]
│   │   │   └── autocfg v1.1.0
│   │   ├── ryu v1.0.16
│   │   ├── serde v1.0.196 (*)
│   │   └── yaml-rust v0.4.5
│   │       └── linked-hash-map v0.5.6
│   ├── slog v2.7.0
│   ├── slog-async v2.8.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── slog v2.7.0
│   │   ├── take_mut v0.2.2
│   │   └── thread_local v1.1.7
│   │       ├── cfg-if v1.0.0
│   │       └── once_cell v1.19.0
│   ├── slog-json v2.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_json v1.0.113
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── slog v2.7.0
│   │   └── time v0.3.34
│   │       ├── deranged v0.3.11
│   │       │   └── powerfmt v0.2.0
│   │       ├── itoa v1.0.10
│   │       ├── libc v0.2.153
│   │       ├── num-conv v0.1.0
│   │       ├── num_threads v0.1.6
│   │       │   └── libc v0.2.153
│   │       ├── powerfmt v0.2.0
│   │       ├── time-core v0.1.2
│   │       └── time-macros v0.2.17 (proc-macro)
│   │           ├── num-conv v0.1.0
│   │           └── time-core v0.1.2
│   ├── slog-term v2.9.0
│   │   ├── atty v0.2.14
│   │   │   └── libc v0.2.153
│   │   ├── slog v2.7.0
│   │   ├── term v0.7.0
│   │   │   └── dirs-next v2.0.0
│   │   │       ├── cfg-if v1.0.0
│   │   │       └── dirs-sys-next v0.1.2
│   │   │           └── libc v0.2.153
│   │   ├── thread_local v1.1.7 (*)
│   │   └── time v0.3.34 (*)
│   ├── socket2 v0.5.5 (*)
│   ├── thread_local v1.1.7 (*)
│   ├── tikv-jemallocator v0.5.4
│   │   ├── libc v0.2.153
│   │   └── tikv-jemalloc-sys v0.5.4+5.3.0-patched
│   │       └── libc v0.2.153
│   │       [build-dependencies]
│   │       └── cc v1.0.83 (*)
│   ├── tokio v1.36.0 (*)
│   └── yaml-merge-keys v0.5.1
│       ├── lazy_static v1.4.0
│       ├── serde_yaml v0.8.26 (*)
│       ├── thiserror v1.0.57 (*)
│       └── yaml-rust v0.4.5 (*)
│   [build-dependencies]
│   ├── bindgen v0.68.1
│   │   ├── bitflags v2.4.2
│   │   ├── cexpr v0.6.0
│   │   │   └── nom v7.1.3
│   │   │       ├── memchr v2.7.1
│   │   │       └── minimal-lexical v0.2.1
│   │   ├── clang-sys v1.7.0
│   │   │   ├── glob v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── libloading v0.8.1
│   │   │       └── cfg-if v1.0.0
│   │   │   [build-dependencies]
│   │   │   └── glob v0.3.1
│   │   ├── lazy_static v1.4.0
│   │   ├── lazycell v1.3.0
│   │   ├── peeking_take_while v0.1.2
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   ├── regex v1.10.3
│   │   │   ├── regex-automata v0.4.5
│   │   │   │   └── regex-syntax v0.8.2
│   │   │   └── regex-syntax v0.8.2
│   │   ├── rustc-hash v1.1.0
│   │   ├── shlex v1.3.0
│   │   └── syn v2.0.48 (*)
│   └── cc v1.0.83 (*)
│   [dev-dependencies]
│   ├── ipnetwork v0.20.0
│   │   └── serde v1.0.196 (*)
│   ├── reqwest v0.11.24
│   │   ├── base64 v0.21.7
│   │   ├── bytes v1.5.0
│   │   ├── encoding_rs v0.8.33
│   │   │   └── cfg-if v1.0.0
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── h2 v0.3.24 (*)
│   │   ├── http v0.2.11 (*)
│   │   ├── http-body v0.4.6 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── ipnet v2.9.0
│   │   ├── log v0.4.20
│   │   ├── mime v0.3.17
│   │   ├── once_cell v1.19.0
│   │   ├── percent-encoding v2.3.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_urlencoded v0.7.1
│   │   │   ├── form_urlencoded v1.2.1
│   │   │   │   └── percent-encoding v2.3.1
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── sync_wrapper v0.1.2
│   │   ├── system-configuration v0.5.1
│   │   │   ├── bitflags v1.3.2
│   │   │   ├── core-foundation v0.9.4
│   │   │   │   ├── core-foundation-sys v0.8.6
│   │   │   │   └── libc v0.2.153
│   │   │   └── system-configuration-sys v0.5.0
│   │   │       ├── core-foundation-sys v0.8.6
│   │   │       └── libc v0.2.153
│   │   ├── tokio v1.36.0 (*)
│   │   ├── tower-service v0.3.2
│   │   └── url v2.5.0
│   │       ├── form_urlencoded v1.2.1 (*)
│   │       ├── idna v0.5.0
│   │       │   ├── unicode-bidi v0.3.15
│   │       │   └── unicode-normalization v0.1.22
│   │       │       └── tinyvec v1.6.0
│   │       │           └── tinyvec_macros v0.1.1
│   │       └── percent-encoding v2.3.1
│   ├── serde v1.0.196 (*)
│   └── tokio v1.36.0 (*)
├── futures-util v0.3.30 (*)
├── hyper v0.14.28 (*)
└── tokio v1.36.0 (*)

foundations v3.2.1 (/Users/nsmc/RustroverProjects/foundations/foundations) (*)

foundations-macros v3.2.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros) (*)

gen-syscall-enum v0.1.0 (/Users/nsmc/RustroverProjects/foundations/tools/gen-syscall-enum)
└── regex v1.10.3 (*)
```

And here's the diff:

```
 ~/R/foundations   …  diff examples/examples.tree root.tree                                                                                                                                          Tue Feb 13 09:03:11 2024
132c132
< │   │   ├── http v0.2.11
---
> │   │   ├── h2 v0.3.24
135c135,172
< │   │   │   └── itoa v1.0.10
---
> │   │   │   ├── futures-core v0.3.30
> │   │   │   ├── futures-sink v0.3.30
> │   │   │   ├── futures-util v0.3.30 (*)
> │   │   │   ├── http v0.2.11
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── fnv v1.0.7
> │   │   │   │   └── itoa v1.0.10
> │   │   │   ├── indexmap v2.2.3
> │   │   │   │   ├── equivalent v1.0.1
> │   │   │   │   ├── hashbrown v0.14.3
> │   │   │   │   └── serde v1.0.196 (*)
> │   │   │   ├── slab v0.4.9 (*)
> │   │   │   ├── tokio v1.36.0
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── libc v0.2.153
> │   │   │   │   ├── mio v0.8.10
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   ├── num_cpus v1.16.0
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   ├── pin-project-lite v0.2.13
> │   │   │   │   ├── socket2 v0.5.5
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   └── tokio-macros v2.2.0 (proc-macro)
> │   │   │   │       ├── proc-macro2 v1.0.78 (*)
> │   │   │   │       ├── quote v1.0.35 (*)
> │   │   │   │       └── syn v2.0.48 (*)
> │   │   │   ├── tokio-util v0.7.10
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── futures-core v0.3.30
> │   │   │   │   ├── futures-sink v0.3.30
> │   │   │   │   ├── pin-project-lite v0.2.13
> │   │   │   │   ├── tokio v1.36.0 (*)
> │   │   │   │   └── tracing v0.1.40
> │   │   │   │       ├── pin-project-lite v0.2.13
> │   │   │   │       └── tracing-core v0.1.32
> │   │   │   │           └── once_cell v1.19.0
> │   │   │   └── tracing v0.1.40 (*)
> │   │   ├── http v0.2.11 (*)
144,151c181,182
< │   │   ├── socket2 v0.5.5
< │   │   │   └── libc v0.2.153
< │   │   ├── tokio v1.36.0
< │   │   │   ├── libc v0.2.153
< │   │   │   ├── mio v0.8.10
< │   │   │   │   └── libc v0.2.153
< │   │   │   ├── pin-project-lite v0.2.13
< │   │   │   └── socket2 v0.5.5 (*)
---
> │   │   ├── socket2 v0.5.5 (*)
> │   │   ├── tokio v1.36.0 (*)
153,156c184
< │   │   ├── tracing v0.1.40
< │   │   │   ├── pin-project-lite v0.2.13
< │   │   │   └── tracing-core v0.1.32
< │   │   │       └── once_cell v1.19.0
---
> │   │   ├── tracing v0.1.40 (*)
159,162c187
< │   ├── indexmap v2.2.3
< │   │   ├── equivalent v1.0.1
< │   │   ├── hashbrown v0.14.3
< │   │   └── serde v1.0.196 (*)
---
> │   ├── indexmap v2.2.3 (*)
197a223,225
> │   │       ├── aho-corasick v1.1.2
> │   │       │   └── memchr v2.7.1
> │   │       ├── memchr v2.7.1
198a227,228
> │   │       │   ├── aho-corasick v1.1.2 (*)
> │   │       │   ├── memchr v2.7.1
335a366,413
> │   [dev-dependencies]
> │   ├── ipnetwork v0.20.0
> │   │   └── serde v1.0.196 (*)
> │   ├── reqwest v0.11.24
> │   │   ├── base64 v0.21.7
> │   │   ├── bytes v1.5.0
> │   │   ├── encoding_rs v0.8.33
> │   │   │   └── cfg-if v1.0.0
> │   │   ├── futures-core v0.3.30
> │   │   ├── futures-util v0.3.30 (*)
> │   │   ├── h2 v0.3.24 (*)
> │   │   ├── http v0.2.11 (*)
> │   │   ├── http-body v0.4.6 (*)
> │   │   ├── hyper v0.14.28 (*)
> │   │   ├── ipnet v2.9.0
> │   │   ├── log v0.4.20
> │   │   ├── mime v0.3.17
> │   │   ├── once_cell v1.19.0
> │   │   ├── percent-encoding v2.3.1
> │   │   ├── pin-project-lite v0.2.13
> │   │   ├── serde v1.0.196 (*)
> │   │   ├── serde_urlencoded v0.7.1
> │   │   │   ├── form_urlencoded v1.2.1
> │   │   │   │   └── percent-encoding v2.3.1
> │   │   │   ├── itoa v1.0.10
> │   │   │   ├── ryu v1.0.16
> │   │   │   └── serde v1.0.196 (*)
> │   │   ├── sync_wrapper v0.1.2
> │   │   ├── system-configuration v0.5.1
> │   │   │   ├── bitflags v1.3.2
> │   │   │   ├── core-foundation v0.9.4
> │   │   │   │   ├── core-foundation-sys v0.8.6
> │   │   │   │   └── libc v0.2.153
> │   │   │   └── system-configuration-sys v0.5.0
> │   │   │       ├── core-foundation-sys v0.8.6
> │   │   │       └── libc v0.2.153
> │   │   ├── tokio v1.36.0 (*)
> │   │   ├── tower-service v0.3.2
> │   │   └── url v2.5.0
> │   │       ├── form_urlencoded v1.2.1 (*)
> │   │       ├── idna v0.5.0
> │   │       │   ├── unicode-bidi v0.3.15
> │   │       │   └── unicode-normalization v0.1.22
> │   │       │       └── tinyvec v1.6.0
> │   │       │           └── tinyvec_macros v0.1.1
> │   │       └── percent-encoding v2.3.1
> │   ├── serde v1.0.196 (*)
> │   └── tokio v1.36.0 (*)
338a417,423
>
> foundations v3.2.1 (/Users/nsmc/RustroverProjects/foundations/foundations) (*)
>
> foundations-macros v3.2.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros) (*)
>
> gen-syscall-enum v0.1.0 (/Users/nsmc/RustroverProjects/foundations/tools/gen-syscall-enum)
> └── regex v1.10.3 (*)
```
Fresh clone and checked out at release `3.0.1`:

```
 ~/R/foundations  ⌂ v3.0.1 …  examples  cargo tree                                                                                                                                                   Tue Feb 13 09:06:41 2024
examples v3.0.1 (/Users/nsmc/RustroverProjects/foundations/examples)
[dev-dependencies]
├── anyhow v1.0.79
│   └── backtrace v0.3.69
│       ├── addr2line v0.21.0
│       │   └── gimli v0.28.1
│       ├── cfg-if v1.0.0
│       ├── libc v0.2.153
│       ├── miniz_oxide v0.7.2
│       │   └── adler v1.0.2
│       ├── object v0.32.2
│       │   └── memchr v2.7.1
│       └── rustc-demangle v0.1.23
│       [build-dependencies]
│       └── cc v1.0.83
│           └── libc v0.2.153
├── foundations v3.0.1 (/Users/nsmc/RustroverProjects/foundations/foundations)
│   ├── anyhow v1.0.79 (*)
│   ├── clap v4.5.0
│   │   └── clap_builder v4.5.0
│   │       ├── anstream v0.6.11
│   │       │   ├── anstyle v1.0.6
│   │       │   ├── anstyle-parse v0.2.3
│   │       │   │   └── utf8parse v0.2.1
│   │       │   ├── anstyle-query v1.0.2
│   │       │   ├── colorchoice v1.0.0
│   │       │   └── utf8parse v0.2.1
│   │       ├── anstyle v1.0.6
│   │       ├── clap_lex v0.7.0
│   │       └── strsim v0.11.0
│   ├── crossbeam-channel v0.5.11
│   │   └── crossbeam-utils v0.8.19
│   ├── erased-serde v0.3.31
│   │   └── serde v1.0.196
│   │       └── serde_derive v1.0.196 (proc-macro)
│   │           ├── proc-macro2 v1.0.78
│   │           │   └── unicode-ident v1.0.12
│   │           ├── quote v1.0.35
│   │           │   └── proc-macro2 v1.0.78 (*)
│   │           └── syn v2.0.48
│   │               ├── proc-macro2 v1.0.78 (*)
│   │               ├── quote v1.0.35 (*)
│   │               └── unicode-ident v1.0.12
│   ├── foundations-macros v3.0.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros)
│   │   ├── darling v0.14.4
│   │   │   ├── darling_core v0.14.4
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   ├── ident_case v1.0.1
│   │   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   │   ├── quote v1.0.35 (*)
│   │   │   │   ├── strsim v0.10.0
│   │   │   │   └── syn v1.0.109
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── unicode-ident v1.0.12
│   │   │   └── darling_macro v0.14.4 (proc-macro)
│   │   │       ├── darling_core v0.14.4 (*)
│   │   │       ├── quote v1.0.35 (*)
│   │   │       └── syn v1.0.109 (*)
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   └── syn v1.0.109 (*)
│   ├── futures-util v0.3.30
│   │   ├── futures-channel v0.3.30
│   │   │   ├── futures-core v0.3.30
│   │   │   └── futures-sink v0.3.30
│   │   ├── futures-core v0.3.30
│   │   ├── futures-io v0.3.30
│   │   ├── futures-macro v0.3.30 (proc-macro)
│   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   ├── quote v1.0.35 (*)
│   │   │   └── syn v2.0.48 (*)
│   │   ├── futures-sink v0.3.30
│   │   ├── futures-task v0.3.30
│   │   ├── memchr v2.7.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── pin-utils v0.1.0
│   │   └── slab v0.4.9
│   │       [build-dependencies]
│   │       └── autocfg v1.1.0
│   ├── governor v0.6.0
│   │   ├── cfg-if v1.0.0
│   │   ├── dashmap v5.5.3
│   │   │   ├── cfg-if v1.0.0
│   │   │   ├── hashbrown v0.14.3
│   │   │   ├── lock_api v0.4.11
│   │   │   │   └── scopeguard v1.2.0
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── once_cell v1.19.0
│   │   │   └── parking_lot_core v0.9.9
│   │   │       ├── cfg-if v1.0.0
│   │   │       ├── libc v0.2.153
│   │   │       └── smallvec v1.13.1
│   │   ├── futures v0.3.30
│   │   │   ├── futures-channel v0.3.30 (*)
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-executor v0.3.30
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-task v0.3.30
│   │   │   │   └── futures-util v0.3.30 (*)
│   │   │   ├── futures-io v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-task v0.3.30
│   │   │   └── futures-util v0.3.30 (*)
│   │   ├── futures-timer v3.0.2
│   │   ├── no-std-compat v0.4.1
│   │   ├── nonzero_ext v0.3.0
│   │   ├── parking_lot v0.12.1
│   │   │   ├── lock_api v0.4.11 (*)
│   │   │   └── parking_lot_core v0.9.9 (*)
│   │   ├── quanta v0.11.1
│   │   │   ├── crossbeam-utils v0.8.19
│   │   │   ├── mach2 v0.4.2
│   │   │   │   └── libc v0.2.153
│   │   │   └── once_cell v1.19.0
│   │   ├── rand v0.8.5
│   │   │   ├── libc v0.2.153
│   │   │   ├── rand_chacha v0.3.1
│   │   │   │   ├── ppv-lite86 v0.2.17
│   │   │   │   └── rand_core v0.6.4
│   │   │   │       └── getrandom v0.2.12
│   │   │   │           ├── cfg-if v1.0.0
│   │   │   │           └── libc v0.2.153
│   │   │   └── rand_core v0.6.4 (*)
│   │   └── smallvec v1.13.1
│   ├── hyper v0.14.28
│   │   ├── bytes v1.5.0
│   │   ├── futures-channel v0.3.30 (*)
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── http v0.2.11
│   │   │   ├── bytes v1.5.0
│   │   │   ├── fnv v1.0.7
│   │   │   └── itoa v1.0.10
│   │   ├── http-body v0.4.6
│   │   │   ├── bytes v1.5.0
│   │   │   ├── http v0.2.11 (*)
│   │   │   └── pin-project-lite v0.2.13
│   │   ├── httparse v1.8.0
│   │   ├── httpdate v1.0.3
│   │   ├── itoa v1.0.10
│   │   ├── pin-project-lite v0.2.13
│   │   ├── socket2 v0.5.5
│   │   │   └── libc v0.2.153
│   │   ├── tokio v1.36.0
│   │   │   ├── libc v0.2.153
│   │   │   ├── mio v0.8.10
│   │   │   │   └── libc v0.2.153
│   │   │   ├── pin-project-lite v0.2.13
│   │   │   └── socket2 v0.5.5 (*)
│   │   ├── tower-service v0.3.2
│   │   ├── tracing v0.1.40
│   │   │   ├── pin-project-lite v0.2.13
│   │   │   └── tracing-core v0.1.32
│   │   │       └── once_cell v1.19.0
│   │   └── want v0.3.1
│   │       └── try-lock v0.2.5
│   ├── indexmap v2.2.3
│   │   ├── equivalent v1.0.1
│   │   ├── hashbrown v0.14.3
│   │   └── serde v1.0.196 (*)
│   ├── once_cell v1.19.0
│   ├── parking_lot v0.12.1 (*)
│   ├── prometheus v0.13.3
│   │   ├── cfg-if v1.0.0
│   │   ├── fnv v1.0.7
│   │   ├── lazy_static v1.4.0
│   │   ├── libc v0.2.153
│   │   ├── memchr v2.7.1
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── protobuf v2.28.0
│   │   └── thiserror v1.0.57
│   │       └── thiserror-impl v1.0.57 (proc-macro)
│   │           ├── proc-macro2 v1.0.78 (*)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v2.0.48 (*)
│   ├── prometheus-client v0.18.1
│   │   ├── dtoa v1.0.9
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── prometheus-client-derive-text-encode v0.3.0 (proc-macro)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v1.0.109 (*)
│   ├── prometools v0.2.1
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── prometheus-client v0.18.1 (*)
│   │   ├── ryu v1.0.16
│   │   └── serde v1.0.196 (*)
│   ├── rand v0.8.5 (*)
│   ├── routerify v3.0.0
│   │   ├── http v0.2.11 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── lazy_static v1.4.0
│   │   ├── percent-encoding v2.3.1
│   │   └── regex v1.10.3
│   │       ├── regex-automata v0.4.5
│   │       │   └── regex-syntax v0.8.2
│   │       └── regex-syntax v0.8.2
│   ├── rustracing v0.6.0
│   │   ├── backtrace v0.3.69 (*)
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── rand v0.8.5 (*)
│   │   └── trackable v1.3.0
│   │       └── trackable_derive v1.0.0 (proc-macro)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v1.0.109 (*)
│   ├── rustracing_jaeger v0.9.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── hostname v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── match_cfg v0.1.0
│   │   ├── local-ip-address v0.5.7
│   │   │   ├── libc v0.2.153
│   │   │   └── thiserror v1.0.57 (*)
│   │   ├── percent-encoding v2.3.1
│   │   ├── rand v0.8.5 (*)
│   │   ├── rustracing v0.6.0 (*)
│   │   ├── thrift_codec v0.2.0
│   │   │   ├── byteorder v1.5.0
│   │   │   └── trackable v1.3.0 (*)
│   │   └── trackable v1.3.0 (*)
│   ├── serde v1.0.196 (*)
│   ├── serde_path_to_error v0.1.15
│   │   ├── itoa v1.0.10
│   │   └── serde v1.0.196 (*)
│   ├── serde_with v3.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_derive v1.0.196 (proc-macro) (*)
│   │   └── serde_with_macros v3.6.1 (proc-macro)
│   │       ├── darling v0.20.5
│   │       │   ├── darling_core v0.20.5
│   │       │   │   ├── fnv v1.0.7
│   │       │   │   ├── ident_case v1.0.1
│   │       │   │   ├── proc-macro2 v1.0.78 (*)
│   │       │   │   ├── quote v1.0.35 (*)
│   │       │   │   ├── strsim v0.10.0
│   │       │   │   └── syn v2.0.48 (*)
│   │       │   └── darling_macro v0.20.5 (proc-macro)
│   │       │       ├── darling_core v0.20.5 (*)
│   │       │       ├── quote v1.0.35 (*)
│   │       │       └── syn v2.0.48 (*)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v2.0.48 (*)
│   ├── serde_yaml v0.8.26
│   │   ├── indexmap v1.9.3
│   │   │   └── hashbrown v0.12.3
│   │   │   [build-dependencies]
│   │   │   └── autocfg v1.1.0
│   │   ├── ryu v1.0.16
│   │   ├── serde v1.0.196 (*)
│   │   └── yaml-rust v0.4.5
│   │       └── linked-hash-map v0.5.6
│   ├── slog v2.7.0
│   ├── slog-async v2.8.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── slog v2.7.0
│   │   ├── take_mut v0.2.2
│   │   └── thread_local v1.1.7
│   │       ├── cfg-if v1.0.0
│   │       └── once_cell v1.19.0
│   ├── slog-json v2.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_json v1.0.113
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── slog v2.7.0
│   │   └── time v0.3.34
│   │       ├── deranged v0.3.11
│   │       │   └── powerfmt v0.2.0
│   │       ├── itoa v1.0.10
│   │       ├── libc v0.2.153
│   │       ├── num-conv v0.1.0
│   │       ├── num_threads v0.1.6
│   │       │   └── libc v0.2.153
│   │       ├── powerfmt v0.2.0
│   │       ├── time-core v0.1.2
│   │       └── time-macros v0.2.17 (proc-macro)
│   │           ├── num-conv v0.1.0
│   │           └── time-core v0.1.2
│   ├── slog-term v2.9.0
│   │   ├── atty v0.2.14
│   │   │   └── libc v0.2.153
│   │   ├── slog v2.7.0
│   │   ├── term v0.7.0
│   │   │   └── dirs-next v2.0.0
│   │   │       ├── cfg-if v1.0.0
│   │   │       └── dirs-sys-next v0.1.2
│   │   │           └── libc v0.2.153
│   │   ├── thread_local v1.1.7 (*)
│   │   └── time v0.3.34 (*)
│   ├── socket2 v0.5.5 (*)
│   ├── thread_local v1.1.7 (*)
│   ├── tikv-jemallocator v0.5.4
│   │   ├── libc v0.2.153
│   │   └── tikv-jemalloc-sys v0.5.4+5.3.0-patched
│   │       └── libc v0.2.153
│   │       [build-dependencies]
│   │       └── cc v1.0.83 (*)
│   ├── tokio v1.36.0 (*)
│   └── yaml-merge-keys v0.5.1
│       ├── lazy_static v1.4.0
│       ├── serde_yaml v0.8.26 (*)
│       ├── thiserror v1.0.57 (*)
│       └── yaml-rust v0.4.5 (*)
│   [build-dependencies]
│   ├── bindgen v0.68.1
│   │   ├── bitflags v2.4.2
│   │   ├── cexpr v0.6.0
│   │   │   └── nom v7.1.3
│   │   │       ├── memchr v2.7.1
│   │   │       └── minimal-lexical v0.2.1
│   │   ├── clang-sys v1.7.0
│   │   │   ├── glob v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── libloading v0.8.1
│   │   │       └── cfg-if v1.0.0
│   │   │   [build-dependencies]
│   │   │   └── glob v0.3.1
│   │   ├── lazy_static v1.4.0
│   │   ├── lazycell v1.3.0
│   │   ├── peeking_take_while v0.1.2
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   ├── regex v1.10.3
│   │   │   ├── regex-automata v0.4.5
│   │   │   │   └── regex-syntax v0.8.2
│   │   │   └── regex-syntax v0.8.2
│   │   ├── rustc-hash v1.1.0
│   │   ├── shlex v1.3.0
│   │   └── syn v2.0.48 (*)
│   └── cc v1.0.83 (*)
├── futures-util v0.3.30 (*)
├── hyper v0.14.28 (*)
└── tokio v1.36.0 (*)
```

From root:

```
 ~/R/foundations  ⌂ v3.0.1 …  cargo tree                                                                                                                                                              Tue Feb 13 09:07:26 2024
examples v3.0.1 (/Users/nsmc/RustroverProjects/foundations/examples)
[dev-dependencies]
├── anyhow v1.0.79
│   └── backtrace v0.3.69
│       ├── addr2line v0.21.0
│       │   └── gimli v0.28.1
│       ├── cfg-if v1.0.0
│       ├── libc v0.2.153
│       ├── miniz_oxide v0.7.2
│       │   └── adler v1.0.2
│       ├── object v0.32.2
│       │   └── memchr v2.7.1
│       └── rustc-demangle v0.1.23
│       [build-dependencies]
│       └── cc v1.0.83
│           └── libc v0.2.153
├── foundations v3.0.1 (/Users/nsmc/RustroverProjects/foundations/foundations)
│   ├── anyhow v1.0.79 (*)
│   ├── clap v4.5.0
│   │   └── clap_builder v4.5.0
│   │       ├── anstream v0.6.11
│   │       │   ├── anstyle v1.0.6
│   │       │   ├── anstyle-parse v0.2.3
│   │       │   │   └── utf8parse v0.2.1
│   │       │   ├── anstyle-query v1.0.2
│   │       │   ├── colorchoice v1.0.0
│   │       │   └── utf8parse v0.2.1
│   │       ├── anstyle v1.0.6
│   │       ├── clap_lex v0.7.0
│   │       └── strsim v0.11.0
│   ├── crossbeam-channel v0.5.11
│   │   └── crossbeam-utils v0.8.19
│   ├── erased-serde v0.3.31
│   │   └── serde v1.0.196
│   │       └── serde_derive v1.0.196 (proc-macro)
│   │           ├── proc-macro2 v1.0.78
│   │           │   └── unicode-ident v1.0.12
│   │           ├── quote v1.0.35
│   │           │   └── proc-macro2 v1.0.78 (*)
│   │           └── syn v2.0.48
│   │               ├── proc-macro2 v1.0.78 (*)
│   │               ├── quote v1.0.35 (*)
│   │               └── unicode-ident v1.0.12
│   ├── foundations-macros v3.0.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros)
│   │   ├── darling v0.14.4
│   │   │   ├── darling_core v0.14.4
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   ├── ident_case v1.0.1
│   │   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   │   ├── quote v1.0.35 (*)
│   │   │   │   ├── strsim v0.10.0
│   │   │   │   └── syn v1.0.109
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── unicode-ident v1.0.12
│   │   │   └── darling_macro v0.14.4 (proc-macro)
│   │   │       ├── darling_core v0.14.4 (*)
│   │   │       ├── quote v1.0.35 (*)
│   │   │       └── syn v1.0.109 (*)
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   └── syn v1.0.109 (*)
│   ├── futures-util v0.3.30
│   │   ├── futures-channel v0.3.30
│   │   │   ├── futures-core v0.3.30
│   │   │   └── futures-sink v0.3.30
│   │   ├── futures-core v0.3.30
│   │   ├── futures-io v0.3.30
│   │   ├── futures-macro v0.3.30 (proc-macro)
│   │   │   ├── proc-macro2 v1.0.78 (*)
│   │   │   ├── quote v1.0.35 (*)
│   │   │   └── syn v2.0.48 (*)
│   │   ├── futures-sink v0.3.30
│   │   ├── futures-task v0.3.30
│   │   ├── memchr v2.7.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── pin-utils v0.1.0
│   │   └── slab v0.4.9
│   │       [build-dependencies]
│   │       └── autocfg v1.1.0
│   ├── governor v0.6.0
│   │   ├── cfg-if v1.0.0
│   │   ├── dashmap v5.5.3
│   │   │   ├── cfg-if v1.0.0
│   │   │   ├── hashbrown v0.14.3
│   │   │   ├── lock_api v0.4.11
│   │   │   │   └── scopeguard v1.2.0
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── once_cell v1.19.0
│   │   │   └── parking_lot_core v0.9.9
│   │   │       ├── cfg-if v1.0.0
│   │   │       ├── libc v0.2.153
│   │   │       └── smallvec v1.13.1
│   │   ├── futures v0.3.30
│   │   │   ├── futures-channel v0.3.30 (*)
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-executor v0.3.30
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-task v0.3.30
│   │   │   │   └── futures-util v0.3.30 (*)
│   │   │   ├── futures-io v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-task v0.3.30
│   │   │   └── futures-util v0.3.30 (*)
│   │   ├── futures-timer v3.0.2
│   │   ├── no-std-compat v0.4.1
│   │   ├── nonzero_ext v0.3.0
│   │   ├── parking_lot v0.12.1
│   │   │   ├── lock_api v0.4.11 (*)
│   │   │   └── parking_lot_core v0.9.9 (*)
│   │   ├── quanta v0.11.1
│   │   │   ├── crossbeam-utils v0.8.19
│   │   │   ├── mach2 v0.4.2
│   │   │   │   └── libc v0.2.153
│   │   │   └── once_cell v1.19.0
│   │   ├── rand v0.8.5
│   │   │   ├── libc v0.2.153
│   │   │   ├── rand_chacha v0.3.1
│   │   │   │   ├── ppv-lite86 v0.2.17
│   │   │   │   └── rand_core v0.6.4
│   │   │   │       └── getrandom v0.2.12
│   │   │   │           ├── cfg-if v1.0.0
│   │   │   │           └── libc v0.2.153
│   │   │   └── rand_core v0.6.4 (*)
│   │   └── smallvec v1.13.1
│   ├── hyper v0.14.28
│   │   ├── bytes v1.5.0
│   │   ├── futures-channel v0.3.30 (*)
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── h2 v0.3.24
│   │   │   ├── bytes v1.5.0
│   │   │   ├── fnv v1.0.7
│   │   │   ├── futures-core v0.3.30
│   │   │   ├── futures-sink v0.3.30
│   │   │   ├── futures-util v0.3.30 (*)
│   │   │   ├── http v0.2.11
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── fnv v1.0.7
│   │   │   │   └── itoa v1.0.10
│   │   │   ├── indexmap v2.2.3
│   │   │   │   ├── equivalent v1.0.1
│   │   │   │   ├── hashbrown v0.14.3
│   │   │   │   └── serde v1.0.196 (*)
│   │   │   ├── slab v0.4.9 (*)
│   │   │   ├── tokio v1.36.0
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── libc v0.2.153
│   │   │   │   ├── mio v0.8.10
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   ├── num_cpus v1.16.0
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   ├── pin-project-lite v0.2.13
│   │   │   │   ├── socket2 v0.5.5
│   │   │   │   │   └── libc v0.2.153
│   │   │   │   └── tokio-macros v2.2.0 (proc-macro)
│   │   │   │       ├── proc-macro2 v1.0.78 (*)
│   │   │   │       ├── quote v1.0.35 (*)
│   │   │   │       └── syn v2.0.48 (*)
│   │   │   ├── tokio-util v0.7.10
│   │   │   │   ├── bytes v1.5.0
│   │   │   │   ├── futures-core v0.3.30
│   │   │   │   ├── futures-sink v0.3.30
│   │   │   │   ├── pin-project-lite v0.2.13
│   │   │   │   ├── tokio v1.36.0 (*)
│   │   │   │   └── tracing v0.1.40
│   │   │   │       ├── pin-project-lite v0.2.13
│   │   │   │       └── tracing-core v0.1.32
│   │   │   │           └── once_cell v1.19.0
│   │   │   └── tracing v0.1.40 (*)
│   │   ├── http v0.2.11 (*)
│   │   ├── http-body v0.4.6
│   │   │   ├── bytes v1.5.0
│   │   │   ├── http v0.2.11 (*)
│   │   │   └── pin-project-lite v0.2.13
│   │   ├── httparse v1.8.0
│   │   ├── httpdate v1.0.3
│   │   ├── itoa v1.0.10
│   │   ├── pin-project-lite v0.2.13
│   │   ├── socket2 v0.5.5 (*)
│   │   ├── tokio v1.36.0 (*)
│   │   ├── tower-service v0.3.2
│   │   ├── tracing v0.1.40 (*)
│   │   └── want v0.3.1
│   │       └── try-lock v0.2.5
│   ├── indexmap v2.2.3 (*)
│   ├── once_cell v1.19.0
│   ├── parking_lot v0.12.1 (*)
│   ├── prometheus v0.13.3
│   │   ├── cfg-if v1.0.0
│   │   ├── fnv v1.0.7
│   │   ├── lazy_static v1.4.0
│   │   ├── libc v0.2.153
│   │   ├── memchr v2.7.1
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── protobuf v2.28.0
│   │   └── thiserror v1.0.57
│   │       └── thiserror-impl v1.0.57 (proc-macro)
│   │           ├── proc-macro2 v1.0.78 (*)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v2.0.48 (*)
│   ├── prometheus-client v0.18.1
│   │   ├── dtoa v1.0.9
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   └── prometheus-client-derive-text-encode v0.3.0 (proc-macro)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v1.0.109 (*)
│   ├── prometools v0.2.1
│   │   ├── itoa v1.0.10
│   │   ├── parking_lot v0.12.1 (*)
│   │   ├── prometheus-client v0.18.1 (*)
│   │   ├── ryu v1.0.16
│   │   └── serde v1.0.196 (*)
│   ├── rand v0.8.5 (*)
│   ├── routerify v3.0.0
│   │   ├── http v0.2.11 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── lazy_static v1.4.0
│   │   ├── percent-encoding v2.3.1
│   │   └── regex v1.10.3
│   │       ├── aho-corasick v1.1.2
│   │       │   └── memchr v2.7.1
│   │       ├── memchr v2.7.1
│   │       ├── regex-automata v0.4.5
│   │       │   ├── aho-corasick v1.1.2 (*)
│   │       │   ├── memchr v2.7.1
│   │       │   └── regex-syntax v0.8.2
│   │       └── regex-syntax v0.8.2
│   ├── rustracing v0.6.0
│   │   ├── backtrace v0.3.69 (*)
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── rand v0.8.5 (*)
│   │   └── trackable v1.3.0
│   │       └── trackable_derive v1.0.0 (proc-macro)
│   │           ├── quote v1.0.35 (*)
│   │           └── syn v1.0.109 (*)
│   ├── rustracing_jaeger v0.9.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── hostname v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── match_cfg v0.1.0
│   │   ├── local-ip-address v0.5.7
│   │   │   ├── libc v0.2.153
│   │   │   └── thiserror v1.0.57 (*)
│   │   ├── percent-encoding v2.3.1
│   │   ├── rand v0.8.5 (*)
│   │   ├── rustracing v0.6.0 (*)
│   │   ├── thrift_codec v0.2.0
│   │   │   ├── byteorder v1.5.0
│   │   │   └── trackable v1.3.0 (*)
│   │   └── trackable v1.3.0 (*)
│   ├── serde v1.0.196 (*)
│   ├── serde_path_to_error v0.1.15
│   │   ├── itoa v1.0.10
│   │   └── serde v1.0.196 (*)
│   ├── serde_with v3.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_derive v1.0.196 (proc-macro) (*)
│   │   └── serde_with_macros v3.6.1 (proc-macro)
│   │       ├── darling v0.20.5
│   │       │   ├── darling_core v0.20.5
│   │       │   │   ├── fnv v1.0.7
│   │       │   │   ├── ident_case v1.0.1
│   │       │   │   ├── proc-macro2 v1.0.78 (*)
│   │       │   │   ├── quote v1.0.35 (*)
│   │       │   │   ├── strsim v0.10.0
│   │       │   │   └── syn v2.0.48 (*)
│   │       │   └── darling_macro v0.20.5 (proc-macro)
│   │       │       ├── darling_core v0.20.5 (*)
│   │       │       ├── quote v1.0.35 (*)
│   │       │       └── syn v2.0.48 (*)
│   │       ├── proc-macro2 v1.0.78 (*)
│   │       ├── quote v1.0.35 (*)
│   │       └── syn v2.0.48 (*)
│   ├── serde_yaml v0.8.26
│   │   ├── indexmap v1.9.3
│   │   │   └── hashbrown v0.12.3
│   │   │   [build-dependencies]
│   │   │   └── autocfg v1.1.0
│   │   ├── ryu v1.0.16
│   │   ├── serde v1.0.196 (*)
│   │   └── yaml-rust v0.4.5
│   │       └── linked-hash-map v0.5.6
│   ├── slog v2.7.0
│   ├── slog-async v2.8.0
│   │   ├── crossbeam-channel v0.5.11 (*)
│   │   ├── slog v2.7.0
│   │   ├── take_mut v0.2.2
│   │   └── thread_local v1.1.7
│   │       ├── cfg-if v1.0.0
│   │       └── once_cell v1.19.0
│   ├── slog-json v2.6.1
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_json v1.0.113
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── slog v2.7.0
│   │   └── time v0.3.34
│   │       ├── deranged v0.3.11
│   │       │   └── powerfmt v0.2.0
│   │       ├── itoa v1.0.10
│   │       ├── libc v0.2.153
│   │       ├── num-conv v0.1.0
│   │       ├── num_threads v0.1.6
│   │       │   └── libc v0.2.153
│   │       ├── powerfmt v0.2.0
│   │       ├── time-core v0.1.2
│   │       └── time-macros v0.2.17 (proc-macro)
│   │           ├── num-conv v0.1.0
│   │           └── time-core v0.1.2
│   ├── slog-term v2.9.0
│   │   ├── atty v0.2.14
│   │   │   └── libc v0.2.153
│   │   ├── slog v2.7.0
│   │   ├── term v0.7.0
│   │   │   └── dirs-next v2.0.0
│   │   │       ├── cfg-if v1.0.0
│   │   │       └── dirs-sys-next v0.1.2
│   │   │           └── libc v0.2.153
│   │   ├── thread_local v1.1.7 (*)
│   │   └── time v0.3.34 (*)
│   ├── socket2 v0.5.5 (*)
│   ├── thread_local v1.1.7 (*)
│   ├── tikv-jemallocator v0.5.4
│   │   ├── libc v0.2.153
│   │   └── tikv-jemalloc-sys v0.5.4+5.3.0-patched
│   │       └── libc v0.2.153
│   │       [build-dependencies]
│   │       └── cc v1.0.83 (*)
│   ├── tokio v1.36.0 (*)
│   └── yaml-merge-keys v0.5.1
│       ├── lazy_static v1.4.0
│       ├── serde_yaml v0.8.26 (*)
│       ├── thiserror v1.0.57 (*)
│       └── yaml-rust v0.4.5 (*)
│   [build-dependencies]
│   ├── bindgen v0.68.1
│   │   ├── bitflags v2.4.2
│   │   ├── cexpr v0.6.0
│   │   │   └── nom v7.1.3
│   │   │       ├── memchr v2.7.1
│   │   │       └── minimal-lexical v0.2.1
│   │   ├── clang-sys v1.7.0
│   │   │   ├── glob v0.3.1
│   │   │   ├── libc v0.2.153
│   │   │   └── libloading v0.8.1
│   │   │       └── cfg-if v1.0.0
│   │   │   [build-dependencies]
│   │   │   └── glob v0.3.1
│   │   ├── lazy_static v1.4.0
│   │   ├── lazycell v1.3.0
│   │   ├── peeking_take_while v0.1.2
│   │   ├── proc-macro2 v1.0.78 (*)
│   │   ├── quote v1.0.35 (*)
│   │   ├── regex v1.10.3
│   │   │   ├── regex-automata v0.4.5
│   │   │   │   └── regex-syntax v0.8.2
│   │   │   └── regex-syntax v0.8.2
│   │   ├── rustc-hash v1.1.0
│   │   ├── shlex v1.3.0
│   │   └── syn v2.0.48 (*)
│   └── cc v1.0.83 (*)
│   [dev-dependencies]
│   ├── ipnetwork v0.20.0
│   │   └── serde v1.0.196 (*)
│   ├── reqwest v0.11.24
│   │   ├── base64 v0.21.7
│   │   ├── bytes v1.5.0
│   │   ├── encoding_rs v0.8.33
│   │   │   └── cfg-if v1.0.0
│   │   ├── futures-core v0.3.30
│   │   ├── futures-util v0.3.30 (*)
│   │   ├── h2 v0.3.24 (*)
│   │   ├── http v0.2.11 (*)
│   │   ├── http-body v0.4.6 (*)
│   │   ├── hyper v0.14.28 (*)
│   │   ├── ipnet v2.9.0
│   │   ├── log v0.4.20
│   │   ├── mime v0.3.17
│   │   ├── once_cell v1.19.0
│   │   ├── percent-encoding v2.3.1
│   │   ├── pin-project-lite v0.2.13
│   │   ├── serde v1.0.196 (*)
│   │   ├── serde_urlencoded v0.7.1
│   │   │   ├── form_urlencoded v1.2.1
│   │   │   │   └── percent-encoding v2.3.1
│   │   │   ├── itoa v1.0.10
│   │   │   ├── ryu v1.0.16
│   │   │   └── serde v1.0.196 (*)
│   │   ├── sync_wrapper v0.1.2
│   │   ├── system-configuration v0.5.1
│   │   │   ├── bitflags v1.3.2
│   │   │   ├── core-foundation v0.9.4
│   │   │   │   ├── core-foundation-sys v0.8.6
│   │   │   │   └── libc v0.2.153
│   │   │   └── system-configuration-sys v0.5.0
│   │   │       ├── core-foundation-sys v0.8.6
│   │   │       └── libc v0.2.153
│   │   ├── tokio v1.36.0 (*)
│   │   ├── tower-service v0.3.2
│   │   └── url v2.5.0
│   │       ├── form_urlencoded v1.2.1 (*)
│   │       ├── idna v0.5.0
│   │       │   ├── unicode-bidi v0.3.15
│   │       │   └── unicode-normalization v0.1.22
│   │       │       └── tinyvec v1.6.0
│   │       │           └── tinyvec_macros v0.1.1
│   │       └── percent-encoding v2.3.1
│   ├── serde v1.0.196 (*)
│   └── tokio v1.36.0 (*)
├── futures-util v0.3.30 (*)
├── hyper v0.14.28 (*)
└── tokio v1.36.0 (*)

foundations v3.0.1 (/Users/nsmc/RustroverProjects/foundations/foundations) (*)

foundations-macros v3.0.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros) (*)

gen-syscall-enum v0.1.0 (/Users/nsmc/RustroverProjects/foundations/tools/gen-syscall-enum)
└── regex v1.10.3 (*)
```

And their diff:

``` 
~/R/foundations  ⌂ v3.0.1 …  diff examples/examples.tree root.tree                                                                                                                           143ms  Tue Feb 13 09:08:06 2024
132c132
< │   │   ├── http v0.2.11
---
> │   │   ├── h2 v0.3.24
135c135,172
< │   │   │   └── itoa v1.0.10
---
> │   │   │   ├── futures-core v0.3.30
> │   │   │   ├── futures-sink v0.3.30
> │   │   │   ├── futures-util v0.3.30 (*)
> │   │   │   ├── http v0.2.11
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── fnv v1.0.7
> │   │   │   │   └── itoa v1.0.10
> │   │   │   ├── indexmap v2.2.3
> │   │   │   │   ├── equivalent v1.0.1
> │   │   │   │   ├── hashbrown v0.14.3
> │   │   │   │   └── serde v1.0.196 (*)
> │   │   │   ├── slab v0.4.9 (*)
> │   │   │   ├── tokio v1.36.0
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── libc v0.2.153
> │   │   │   │   ├── mio v0.8.10
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   ├── num_cpus v1.16.0
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   ├── pin-project-lite v0.2.13
> │   │   │   │   ├── socket2 v0.5.5
> │   │   │   │   │   └── libc v0.2.153
> │   │   │   │   └── tokio-macros v2.2.0 (proc-macro)
> │   │   │   │       ├── proc-macro2 v1.0.78 (*)
> │   │   │   │       ├── quote v1.0.35 (*)
> │   │   │   │       └── syn v2.0.48 (*)
> │   │   │   ├── tokio-util v0.7.10
> │   │   │   │   ├── bytes v1.5.0
> │   │   │   │   ├── futures-core v0.3.30
> │   │   │   │   ├── futures-sink v0.3.30
> │   │   │   │   ├── pin-project-lite v0.2.13
> │   │   │   │   ├── tokio v1.36.0 (*)
> │   │   │   │   └── tracing v0.1.40
> │   │   │   │       ├── pin-project-lite v0.2.13
> │   │   │   │       └── tracing-core v0.1.32
> │   │   │   │           └── once_cell v1.19.0
> │   │   │   └── tracing v0.1.40 (*)
> │   │   ├── http v0.2.11 (*)
144,151c181,182
< │   │   ├── socket2 v0.5.5
< │   │   │   └── libc v0.2.153
< │   │   ├── tokio v1.36.0
< │   │   │   ├── libc v0.2.153
< │   │   │   ├── mio v0.8.10
< │   │   │   │   └── libc v0.2.153
< │   │   │   ├── pin-project-lite v0.2.13
< │   │   │   └── socket2 v0.5.5 (*)
---
> │   │   ├── socket2 v0.5.5 (*)
> │   │   ├── tokio v1.36.0 (*)
153,156c184
< │   │   ├── tracing v0.1.40
< │   │   │   ├── pin-project-lite v0.2.13
< │   │   │   └── tracing-core v0.1.32
< │   │   │       └── once_cell v1.19.0
---
> │   │   ├── tracing v0.1.40 (*)
159,162c187
< │   ├── indexmap v2.2.3
< │   │   ├── equivalent v1.0.1
< │   │   ├── hashbrown v0.14.3
< │   │   └── serde v1.0.196 (*)
---
> │   ├── indexmap v2.2.3 (*)
198a224,226
> │   │       ├── aho-corasick v1.1.2
> │   │       │   └── memchr v2.7.1
> │   │       ├── memchr v2.7.1
199a228,229
> │   │       │   ├── aho-corasick v1.1.2 (*)
> │   │       │   ├── memchr v2.7.1
336a367,414
> │   [dev-dependencies]
> │   ├── ipnetwork v0.20.0
> │   │   └── serde v1.0.196 (*)
> │   ├── reqwest v0.11.24
> │   │   ├── base64 v0.21.7
> │   │   ├── bytes v1.5.0
> │   │   ├── encoding_rs v0.8.33
> │   │   │   └── cfg-if v1.0.0
> │   │   ├── futures-core v0.3.30
> │   │   ├── futures-util v0.3.30 (*)
> │   │   ├── h2 v0.3.24 (*)
> │   │   ├── http v0.2.11 (*)
> │   │   ├── http-body v0.4.6 (*)
> │   │   ├── hyper v0.14.28 (*)
> │   │   ├── ipnet v2.9.0
> │   │   ├── log v0.4.20
> │   │   ├── mime v0.3.17
> │   │   ├── once_cell v1.19.0
> │   │   ├── percent-encoding v2.3.1
> │   │   ├── pin-project-lite v0.2.13
> │   │   ├── serde v1.0.196 (*)
> │   │   ├── serde_urlencoded v0.7.1
> │   │   │   ├── form_urlencoded v1.2.1
> │   │   │   │   └── percent-encoding v2.3.1
> │   │   │   ├── itoa v1.0.10
> │   │   │   ├── ryu v1.0.16
> │   │   │   └── serde v1.0.196 (*)
> │   │   ├── sync_wrapper v0.1.2
> │   │   ├── system-configuration v0.5.1
> │   │   │   ├── bitflags v1.3.2
> │   │   │   ├── core-foundation v0.9.4
> │   │   │   │   ├── core-foundation-sys v0.8.6
> │   │   │   │   └── libc v0.2.153
> │   │   │   └── system-configuration-sys v0.5.0
> │   │   │       ├── core-foundation-sys v0.8.6
> │   │   │       └── libc v0.2.153
> │   │   ├── tokio v1.36.0 (*)
> │   │   ├── tower-service v0.3.2
> │   │   └── url v2.5.0
> │   │       ├── form_urlencoded v1.2.1 (*)
> │   │       ├── idna v0.5.0
> │   │       │   ├── unicode-bidi v0.3.15
> │   │       │   └── unicode-normalization v0.1.22
> │   │       │       └── tinyvec v1.6.0
> │   │       │           └── tinyvec_macros v0.1.1
> │   │       └── percent-encoding v2.3.1
> │   ├── serde v1.0.196 (*)
> │   └── tokio v1.36.0 (*)
339a418,424
>
> foundations v3.0.1 (/Users/nsmc/RustroverProjects/foundations/foundations) (*)
>
> foundations-macros v3.0.1 (proc-macro) (/Users/nsmc/RustroverProjects/foundations/foundations-macros) (*)
>
> gen-syscall-enum v0.1.0 (/Users/nsmc/RustroverProjects/foundations/tools/gen-syscall-enum)
> └── regex v1.10.3 (*)
```
I'm new to workspaces, but I wonder if the solution is to pull down another workspace dependency from the root to the `examples` Cargo.toml.
@beaknit if you don't mind I'll hide your comments with dependency trees to make the thread easier to read. If I understand Github's docs on that correctly it should just collapse the comment and not make it invisible completely.

Fix patch:
diff --git a/examples/Cargo.toml b/examples/Cargo.toml
index 9001bcb..cd02c67 100644
--- a/examples/Cargo.toml
+++ b/examples/Cargo.toml
@@ -10,7 +10,7 @@ anyhow = { workspace = true }
 foundations = { workspace = true }
 futures-util = { workspace = true }
 hyper = { workspace = true }
-tokio = { workspace = true }
+tokio = { workspace = true, features = ["full"]}
 
 [[example]]
 name = "http_server"
diff --git a/examples/http_server/main.rs b/examples/http_server/main.rs
index 721c4ae..1e075a4 100644
--- a/examples/http_server/main.rs
+++ b/examples/http_server/main.rs
@@ -6,7 +6,7 @@
 //! cargo run --example http_server -- --help
 //! ```
 //!
-//! for the usage info.
+//! from the repo root for the usage info.
 
 mod metrics;
 mod settings;
diff --git a/foundations/Cargo.toml b/foundations/Cargo.toml
index 1c5252c..c900ca8 100644
--- a/foundations/Cargo.toml
+++ b/foundations/Cargo.toml
@@ -171,7 +171,7 @@ routerify = { workspace = true, optional = true }
 rand = { workspace = true, optional = true }
 rustracing = { workspace = true, optional = true }
 rustracing_jaeger = { workspace = true, optional = true }
-serde = { workspace = true, optional = true, features = ["derive"] }
+serde = { workspace = true, optional = true, features = ["derive", "rc"] }
 serde_path_to_error = { workspace = true, optional = true }
 serde_yaml = { workspace = true, optional = true }
 serde_with = { workspace = true, optional = true }


Test patch: