message: Make Progress opaque but accessible
  This makes it possible to add some members in the future. Note that only
  this library can create an instance which means it is currently unusable
  by user-defined decoders. This is a less pressing concern though, these
  can simply never call the callback.
diff: @@ -383,15 +383,23 @@ pub(crate) fn decoder_to_vec<'a>(decoder: impl ImageDecoder<'a>) -> ImageResult<
  /// progress `(0, 0)` if progress is unknown, without violating the interface contract of the type.
  #[derive(Clone, Copy, Debug, PartialEq, Eq)]
  pub struct Progress {
  + current: u64,
  + total: u64,
  +}
  +
  +impl Progress {
  /// A measure of completed decoding.
  - pub current: u64,
  + pub fn current(self) -> u64 {
  + self.current
  + }
  +
  /// A measure of all necessary decoding work.
  ///
  /// This is in general greater or equal than `current`.
  - pub total: u64,
  + pub fn total(self) -> u64 {
  + self.total
  }
  -impl Progress {
  /// Calculate a measure for remaining decoding work.
  pub fn remaining(self) -> u64 {
  self.total.max(self.current) - self.current
  