@ -90,8 +90,8 @@ impl<'a> GroupConfig<'a>
}
#[ inline ]
fn print_groups < ' c , ' a , S : ? Sized , G , T : ' a , I > ( to : & mut S , g : G , groups : I , how : GroupConfig< ' c > ) -> std ::io ::Result < ( ) >
where S : std ::io ::Write ,
fn print_groups < ' c , ' a , S : ? Sized , G , T : ' a , I > ( to : & mut S , g : G , groups : I , how : impl std ::borrow ::Borrow < GroupConfig< ' c > > ) -> std ::io ::Result < ( ) >
where S : std ::io ::Write + ' c , // NOTE: This lifetime bound is not yet used, as it is just `Write`, but if we change this to a context wrapper, then we can copy the `how`'s `'c` references into the context object without direct write/format/cloning.
G : IntoIterator < Item = & ' a Option < T > > + Clone + Copy , // NOTE: Copy bound to ensure we're not accidentally doing deep clones of `g`.
//G: std::ops::Index<usize>, G::Output: std::borrow::Borrow<Option<T>>,
T : std ::borrow ::Borrow < str > ,
@ -101,6 +101,7 @@ where S: std::io::Write,
borrow ::Borrow ,
io ::Write ,
} ;
let how = how . borrow ( ) ; //std::borrow::ToOwned::clone_into(&self, target);
let mut first = true ;
for group in groups . into_iter ( ) {
let group = group . borrow ( ) ;
@ -128,7 +129,7 @@ where S: std::io::Write,
first = false ;
}
// If `first == true`, no groups were printed, so we do not print the new-line.
if ! first & & ! how . line_delimiter. is_empty ( ) {
if ! first & & how . has_ line_delimiter( ) {
to . write_all ( how . line_delimiter . as_ref ( ) )
} else {
Ok ( ( ) )
@ -181,11 +182,11 @@ fn main() -> eyre::Result<()>
let mut stdout = std ::io ::stdout ( ) ;
if & text [ .. ] = = "-" {
text ::stdin_lines ( | text | -> eyre ::Result < bool > {
let mut stdout = stdout . lock ( ) ;
let mut stdout = std ::io ::BufWriter ::new ( stdout . lock ( ) ) ;
text ::stdin_lines ( move | text | -> eyre ::Result < bool > {
match re . exec ( & text ) ? {
Some ( g ) /* if g.len() > group */ = > // NOTE: This check branch has now been moved into `print_groups()`
print_groups ( & mut stdout , & g , & groups , print_cfg . clone ( ) ) ? , //println!("{}", &g[group]),
print_groups ( & mut stdout , & g , & groups , & print_cfg ) ? , //println!("{}", &g[group]),
_ = > ( ) ,
}
Ok ( true )