Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(nll)]
- trait DebugWith<Cx: ?Sized> {
- fn debug_with<'me>(&'me self, cx: &'me Cx) -> DebugCxPair<'me, Self, Cx> {
- DebugCxPair { value: self, cx }
- }
- fn fmt_with(&self, _cx: &Cx, _fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result;
- }
- struct DebugCxPair<'me, Value: ?Sized, Cx: ?Sized>
- where
- Value: DebugWith<Cx>,
- {
- value: &'me Value,
- cx: &'me Cx,
- }
- trait DebugContext { }
- struct Foo {
- bar: Bar
- }
- impl DebugWith<dyn DebugContext> for Foo {
- fn fmt_with(&self, cx: &dyn DebugContext, _fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- let Foo { bar } = self;
- bar.debug_with(cx);
- Ok(())
- }
- }
- struct Bar { }
- impl DebugWith<dyn DebugContext> for Bar {
- fn fmt_with(&self, _cx: &dyn DebugContext, _fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- Ok(())
- }
- }
- fn main() { }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement