]>
Commit | Line | Data |
---|---|---|
3dfed10e XL |
1 | //! `RenderAsRust` trait and related utils. |
2 | use std::fmt::{Display, Formatter, Result}; | |
3 | ||
4 | use chalk_ir::interner::Interner; | |
5 | ||
6 | use super::state::InternalWriterState; | |
7 | ||
8 | /// Displays `RenderAsRust` data. | |
9 | /// | |
10 | /// This is a utility struct for making `RenderAsRust` nice to use with rust format macros. | |
11 | pub(in crate::display) struct DisplayRenderAsRust<'a, I: Interner, T> { | |
12 | s: &'a InternalWriterState<'a, I>, | |
13 | rar: &'a T, | |
14 | } | |
15 | ||
16 | impl<I: Interner, T: RenderAsRust<I>> Display for DisplayRenderAsRust<'_, I, T> { | |
17 | fn fmt(&self, f: &mut Formatter<'_>) -> Result { | |
18 | self.rar.fmt(self.s, f) | |
19 | } | |
20 | } | |
21 | ||
22 | pub(in crate::display) trait RenderAsRust<I: Interner> { | |
23 | fn fmt(&self, s: &InternalWriterState<'_, I>, f: &mut Formatter<'_>) -> Result; | |
24 | fn display<'a>(&'a self, s: &'a InternalWriterState<'a, I>) -> DisplayRenderAsRust<'a, I, Self> | |
25 | where | |
26 | Self: Sized, | |
27 | { | |
28 | DisplayRenderAsRust { s, rar: self } | |
29 | } | |
30 | } |