Skip to content

Commit cd2bfa0

Browse files
authored
improve tower-layer docs (#834)
* improve tower-layer docs * fix compile issues
1 parent 9e901d4 commit cd2bfa0

File tree

3 files changed

+49
-11
lines changed

3 files changed

+49
-11
lines changed

tower-layer/src/identity.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,35 @@ use core::fmt;
77
/// service without modifying it.
88
///
99
/// [`Service`]: https://docs.rs/tower-service/latest/tower_service/trait.Service.html
10+
///
11+
/// # Examples
12+
///
13+
/// ```rust
14+
/// use tower_layer::Identity;
15+
/// use tower_layer::Layer;
16+
///
17+
/// let identity = Identity::new();
18+
///
19+
/// assert_eq!(identity.layer(42), 42);
20+
/// ```
1021
#[derive(Default, Clone)]
1122
pub struct Identity {
1223
_p: (),
1324
}
1425

1526
impl Identity {
16-
/// Create a new [`Identity`] value
27+
/// Creates a new [`Identity`].
28+
///
29+
/// ```rust
30+
/// use tower_layer::Identity;
31+
///
32+
/// let identity = Identity::new();
33+
/// ```
1734
pub const fn new() -> Identity {
1835
Identity { _p: () }
1936
}
2037
}
2138

22-
/// Decorates a [`Service`], transforming either the request or the response.
23-
///
24-
/// [`Service`]: https://docs.rs/tower-service/latest/tower_service/trait.Service.html
2539
impl<S> Layer<S> for Identity {
2640
type Service = S;
2741

tower-layer/src/layer_fn.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ use core::fmt;
44
/// Returns a new [`LayerFn`] that implements [`Layer`] by calling the
55
/// given function.
66
///
7-
/// The [`Layer::layer`] method takes a type implementing [`Service`] and
7+
/// The [`Layer::layer()`] method takes a type implementing [`Service`] and
88
/// returns a different type implementing [`Service`]. In many cases, this can
99
/// be implemented by a function or a closure. The [`LayerFn`] helper allows
1010
/// writing simple [`Layer`] implementations without needing the boilerplate of
1111
/// a new struct implementing [`Layer`].
1212
///
13-
/// # Example
13+
/// [`Service`]: https://docs.rs/tower-service/latest/tower_service/trait.Service.html
14+
/// [`Layer::layer()`]: crate::Layer::layer
15+
///
16+
/// # Examples
17+
///
1418
/// ```rust
1519
/// # use tower::Service;
1620
/// # use core::task::{Poll, Context};
@@ -61,9 +65,6 @@ use core::fmt;
6165
/// // Wrap our service in a `LogService` so requests are logged.
6266
/// let wrapped_service = log_layer.layer(uppercase_service);
6367
/// ```
64-
///
65-
/// [`Service`]: https://docs.rs/tower-service/latest/tower_service/trait.Service.html
66-
/// [`Layer::layer`]: crate::Layer::layer
6768
pub fn layer_fn<T>(f: T) -> LayerFn<T> {
6869
LayerFn { f }
6970
}

tower-layer/src/stack.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,38 @@
11
use super::Layer;
22
use core::fmt;
33

4-
/// Two middlewares chained together.
4+
/// Two [`Layer`]s chained together.
5+
///
6+
/// # Examples
7+
///
8+
/// ```rust
9+
/// use tower_layer::{Stack, layer_fn, Layer};
10+
///
11+
/// let inner = layer_fn(|service| service+2);
12+
/// let outer = layer_fn(|service| service*2);
13+
///
14+
/// let inner_outer_stack = Stack::new(inner, outer);
15+
///
16+
/// // (4 + 2) * 2 = 12
17+
/// // (4 * 2) + 2 = 10
18+
/// assert_eq!(inner_outer_stack.layer(4), 12);
19+
/// ```
520
#[derive(Clone)]
621
pub struct Stack<Inner, Outer> {
722
inner: Inner,
823
outer: Outer,
924
}
1025

1126
impl<Inner, Outer> Stack<Inner, Outer> {
12-
/// Create a new `Stack`.
27+
/// Creates a new [`Stack`].
28+
///
29+
/// # Examples
30+
///
31+
/// ```rust
32+
/// use tower_layer::{Stack, Identity};
33+
///
34+
/// let stack = Stack::new(Identity::new(), Identity::new());
35+
/// ```
1336
pub const fn new(inner: Inner, outer: Outer) -> Self {
1437
Stack { inner, outer }
1538
}

0 commit comments

Comments
 (0)