mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-15 17:32:56 +00:00
## Problem `cargo +nightly doc` is giving a lot of warnings: broken links, naked URLs, etc. ## Summary of changes * update the `proc-macro2` dependency so that it can compile on latest Rust nightly, see https://github.com/dtolnay/proc-macro2/pull/391 and https://github.com/dtolnay/proc-macro2/issues/398 * allow the `private_intra_doc_links` lint, as linking to something that's private is always more useful than just mentioning it without a link: if the link breaks in the future, at least there is a warning due to that. Also, one might enable [`--document-private-items`](https://doc.rust-lang.org/cargo/commands/cargo-doc.html#documentation-options) in the future and make these links work in general. * fix all the remaining warnings given by `cargo +nightly doc` * make it possible to run `cargo doc` on stable Rust by updating `opentelemetry` and associated crates to version 0.19, pulling in a fix that previously broke `cargo doc` on stable: https://github.com/open-telemetry/opentelemetry-rust/pull/904 * Add `cargo doc` to CI to ensure that it won't get broken in the future. Fixes #2557 ## Future work * Potentially, it might make sense, for development purposes, to publish the generated rustdocs somewhere, like for example [how the rust compiler does it](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/index.html). I will file an issue for discussion.
24 lines
618 B
Rust
24 lines
618 B
Rust
//! Helpers for observing duration on `HistogramVec` / `CounterVec` / `GaugeVec` / `MetricVec<T>`.
|
|
|
|
use std::{future::Future, time::Instant};
|
|
|
|
pub trait DurationResultObserver {
|
|
fn observe_result<T, E>(&self, res: &Result<T, E>, duration: std::time::Duration);
|
|
}
|
|
|
|
pub async fn observe_async_block_duration_by_result<
|
|
T,
|
|
E,
|
|
F: Future<Output = Result<T, E>>,
|
|
O: DurationResultObserver,
|
|
>(
|
|
observer: &O,
|
|
block: F,
|
|
) -> Result<T, E> {
|
|
let start = Instant::now();
|
|
let result = block.await;
|
|
let duration = start.elapsed();
|
|
observer.observe_result(&result, duration);
|
|
result
|
|
}
|