pub fn filtrate<I>(filter: &mut I) -> Option<<I::Feed as Feed>::Filtrate>
where
    I: SeparatingFilter,
{
    loop {
        if let Some(separation) = filter.feed() {
            return match separation.filtrate() {
                None => {
                    continue;
                }
                Some(filtrate) => Some(filtrate.into_inner()),
            };
        }
        return None;
    }
}
Feeds a [`SeparatingFilter`] and yields the next filtrate.

This function can be used to implement [`Iterator`] for
[`SeparatingFilter`]s and bridges [`SeparatingFilter`]s into the output of
an iterator. See the [`SeparatingFilterInput`] trait for the input analog.

[`Iterator`]: std::iter::Iterator
[`SeparatingFilter`]: crate::walk::filter::SeparatingFilter
[`SeparatingFilterInput`]: crate::walk::filter::SeparatingFilterInput
crates/turborepo-wax/src/walk/filter.rs