use ok_or_else
diff --git a/lib/rs/src/protocol/compact.rs b/lib/rs/src/protocol/compact.rs
index 0ded14a..c542bbd 100644
--- a/lib/rs/src/protocol/compact.rs
+++ b/lib/rs/src/protocol/compact.rs
@@ -220,7 +220,7 @@
                     self.last_read_field_id = self
                         .last_read_field_id
                         .checked_add(field_delta as i16)
-                        .ok_or(crate::Error::Protocol(crate::ProtocolError {
+                        .ok_or_else(|| crate::Error::Protocol(crate::ProtocolError {
                             kind: crate::ProtocolErrorKind::InvalidData,
                             message: format!(
                                 "invalid field delta {} for last field id {}",