mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-31 12:33:40 +00:00
* refactor project structure * environment-based default registry * fix tests * update build container * use docker platform for iso build emulation * simplify compat * Fix docker platform spec in run-compat.sh * handle riscv compat * fix bug with dep error exists attr * undo removal of sorting * use qemu for iso stage --------- Co-authored-by: Mariusz Kogen <k0gen@pm.me> Co-authored-by: Matt Hill <mattnine@protonmail.com>
32 lines
915 B
Rust
32 lines
915 B
Rust
pub trait TransposeResultIterExt: Sized {
|
|
type Ok: IntoIterator;
|
|
type Err;
|
|
fn transpose(self) -> TransposeResult<Self::Ok, Self::Err>;
|
|
}
|
|
impl<T: IntoIterator, E> TransposeResultIterExt for Result<T, E> {
|
|
type Ok = T;
|
|
type Err = E;
|
|
fn transpose(self) -> TransposeResult<T, E> {
|
|
TransposeResult(Some(self.map(|t| t.into_iter())))
|
|
}
|
|
}
|
|
|
|
pub struct TransposeResult<T: IntoIterator, E>(Option<Result<T::IntoIter, E>>);
|
|
impl<T, E> Iterator for TransposeResult<T, E>
|
|
where
|
|
T: IntoIterator,
|
|
{
|
|
type Item = Result<T::Item, E>;
|
|
fn next(&mut self) -> Option<Self::Item> {
|
|
if self.0.as_ref().map_or(true, |r| r.is_err()) {
|
|
self.0
|
|
.take()
|
|
.map(|e| Err(e.map_or_else(|e| e, |_| unreachable!())))
|
|
} else if let Some(Ok(res)) = &mut self.0 {
|
|
res.next().map(Ok)
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
}
|