changeset 50209:af9d050f2bb8

rust: box ConfigValueParseError to avoid large result types clippy emits a warning that all the Result types are way too large because of HgError includes ConfigValueParseError as one of the variants, so its size is 136 bytes. By boxing ConfigValueParseError we're hopefully making everything faster "for free".
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Mon, 27 Feb 2023 18:24:29 +0000
parents 3f3fca243dca
children a7cbb626ec3f
files rust/hg-core/src/config/mod.rs
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-core/src/config/mod.rs	Wed Feb 22 02:08:11 2023 +0100
+++ b/rust/hg-core/src/config/mod.rs	Mon Feb 27 18:24:29 2023 +0000
@@ -64,7 +64,7 @@
 }
 
 #[derive(Debug)]
-pub struct ConfigValueParseError {
+pub struct ConfigValueParseErrorDetails {
     pub origin: ConfigOrigin,
     pub line: Option<usize>,
     pub section: Vec<u8>,
@@ -73,6 +73,9 @@
     pub expected_type: &'static str,
 }
 
+// boxed to avoid very large Result types
+pub type ConfigValueParseError = Box<ConfigValueParseErrorDetails>;
+
 impl fmt::Display for ConfigValueParseError {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         // TODO: add origin and line number information, here and in
@@ -354,14 +357,14 @@
         match self.get_inner(section, item) {
             Some((layer, v)) => match parse(&v.bytes) {
                 Some(b) => Ok(Some(b)),
-                None => Err(ConfigValueParseError {
+                None => Err(Box::new(ConfigValueParseErrorDetails {
                     origin: layer.origin.to_owned(),
                     line: v.line,
                     value: v.bytes.to_owned(),
                     section: section.to_owned(),
                     item: item.to_owned(),
                     expected_type,
-                }),
+                })),
             },
             None => Ok(None),
         }