1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//! Wrapper shells: [`ForwardShell`] hands every [`TableShell`](crate::TableShell)
//! method to an inner shell unless the wrapper overrides it, and
//! [`forward_table_shell!`](crate::forward_table_shell) implements it for a
//! wrapper holding the inner shell in a field.
pub use ForwardShell;
/// Implement [`ForwardShell`] (and so [`TableShell`](crate::TableShell)) for
/// `$ty`, whose `$field` holds the inner shell (anything that derefs to a
/// `TableShell`).
///
/// The block holds the rest of the impl, written as in an `#[async_trait]`
/// impl: `clone_shell` (required), then whichever methods the wrapper
/// changes. Every other method answers as the inner shell does.
///
/// ```ignore
/// vantage_vista::forward_table_shell!(Logged, inner, {
/// fn clone_shell(&self) -> Option<Box<dyn TableShell>> { /* re-wrap */ }
/// fn columns(&self) -> &IndexMap<String, Column> { &self.columns }
/// // reads, writes, get_ref...
/// });
/// ```