Skip to main content

cl_typeck/
format_utils.rs

1pub use cl_ast::fmt::*;
2use std::{fmt, iter};
3
4/// Separates the items yielded by iterating the provided function
5pub const fn separate<'f, 's, Item, F, W>(sep: &'s str, t: F) -> impl FnOnce(W) -> fmt::Result + 's
6where
7    Item: FnMut(&mut W) -> fmt::Result,
8    F: FnMut() -> Option<Item> + 's,
9    W: fmt::Write,
10{
11    move |mut f| {
12        for (idx, mut disp) in iter::from_fn(t).enumerate() {
13            if idx > 0 {
14                f.write_str(sep)?;
15            }
16            disp(&mut f)?;
17        }
18        Ok(())
19    }
20}