#[throws(EH::Err)]
fn parse_bundle<EH>(id: Id, file: &mut dyn ReadSeek, eh: EH,
- _for_progress: &mut dyn progress::Reporter) -> Parsed
+ mut for_progress: &mut dyn progress::Reporter) -> Parsed
where EH: BundleParseErrorHandling,
{
match id.kind { Kind::Zip => () }
IndexedZip::new(file)
})?;
+ #[derive(Copy,Clone,Debug,EnumCount,EnumMessage,ToPrimitive)]
+ enum Phase {
+ #[strum(message="scan")] Scan,
+ }
+
+ #[derive(Copy,Clone,Debug,EnumCount,EnumMessage,ToPrimitive)]
+ enum ToScan {
+ #[strum(message="metadata")] Meta,
+ }
+ for_progress.phase_entry(Phase::Scan, ToScan::Meta);
+
let meta = eh.besteffort(||{
const META: &str = "otter.toml";
let mut mf = za.by_name_caseless(META)?
pub use nix::unistd::{self, Uid};
pub use nix::sys::time::TimeSpec;
pub use nix::time::clock_gettime;
-pub use num_derive::FromPrimitive;
+pub use num_derive::{ToPrimitive, FromPrimitive};
pub use num_traits::{Bounded, FromPrimitive, ToPrimitive};
pub use ordered_float::OrderedFloat;
pub use parking_lot::{Condvar, Mutex, MutexGuard};
pub use serde_with::SerializeDisplay;
pub use sha2::{Sha512, Sha512Trunc256};
pub use slotmap::{dense::DenseSlotMap, SparseSecondaryMap, Key as _};
-pub use strum::{AsStaticRef, EnumCount, EnumString, EnumIter, EnumProperty};
+pub use strum::{EnumCount};
+pub use strum::{EnumString, EnumIter, EnumMessage, EnumProperty};
pub use strum::{IntoEnumIterator, IntoStaticStr};
pub use subtle::ConstantTimeEq;
pub use tempfile::NamedTempFile;
pub use crate::pcaliases::*;
pub use crate::pcrender::*;
pub use crate::pieces::*;
-pub use crate::progress::{self, ProgressInfo};
+pub use crate::progress::{self, ProgressInfo, ReporterExt as _};
pub use crate::shapelib;
pub use crate::shapelib::{CircleShape, RectShape};
pub use crate::slotmap_slot_idx::*;
}
pub trait Reporter {
- fn report(&mut self, info: ProgressInfo<'_>)
- -> Result<(), MgmtChannelWriteError>;
+ fn report(&mut self, info: ProgressInfo<'_>);
}
impl<W> Reporter for ResponseWriter<'_, W> where W: Write {
- #[throws(MgmtChannelWriteError)]
fn report(&mut self, pi: ProgressInfo<'_>) {
- self.progress(pi)?
+ self.progress(pi).unwrap_or(());
}
}
impl Reporter for () {
- #[throws(MgmtChannelWriteError)]
fn report(&mut self, _pi: ProgressInfo<'_>) { }
}
-impl<T> From<T> for Count<'static>
-where T: EnumCount + ToPrimitive + AsStaticRef<str>
+impl<'t,T> From<&'t T> for Count<'t>
+where T: EnumCount + ToPrimitive + EnumMessage
{
- fn from(t: T) -> Count<'static> {
+ fn from(t: &'t T) -> Count<'t> {
Count {
i: t.to_usize().unwrap(),
n: T::COUNT,
- desc: Cow::Borrowed(t.as_static()),
+ desc: Cow::Borrowed(t.get_message().unwrap_or("...")),
}
}
}
-#[ext(pub)]
+#[ext(pub, name=ReporterExt)]
impl &mut dyn Reporter {
- #[throws(MgmtChannelWriteError)]
- fn phase_entry<'p,'e,P,E>(&mut self, phase: P, entry: E)
- where P: Into<Count<'p>>,
- E: Into<Count<'e>>,
+ fn phase_entry<P,E>(&mut self, phase: P, entry: E)
+ where for <'p> &'p P: Into<Count<'p>>,
+ for <'e> &'e E: Into<Count<'e>>,
{
- self.report(ProgressInfo {
- phase: phase.into(),
- entry: entry.into(),
- })?
+ let phase = &phase; let phase = phase.into();
+ let entry = &entry; let entry = entry.into();
+ self.report(ProgressInfo { phase, entry });
}
}