diff --git a/Cargo.lock b/Cargo.lock index d77eff6..5c37704 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2459,6 +2459,7 @@ dependencies = [ name = "rnex-base-protos" version = "0.1.0" dependencies = [ + "cfg-if", "ctor", "rnex-rmc", "tracing", diff --git a/rnex-protocols/base-protos/Cargo.toml b/rnex-protocols/base-protos/Cargo.toml index 8f4cd75..a4898ec 100644 --- a/rnex-protocols/base-protos/Cargo.toml +++ b/rnex-protocols/base-protos/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] +cfg-if = "1.0.4" ctor = "1.0.8" rnex-rmc = { path = "../../rnex-rmc" } tracing = "0.1.44" diff --git a/rnex-protocols/base-protos/src/lib.rs b/rnex-protocols/base-protos/src/lib.rs index c00c83e..20f7fc8 100644 --- a/rnex-protocols/base-protos/src/lib.rs +++ b/rnex-protocols/base-protos/src/lib.rs @@ -5,6 +5,7 @@ pub mod secure; pub mod util; use secure::{RawSecure, RawSecureInfo, RemoteSecure, Secure}; use util::{RawUtility, RawUtilityInfo, RemoteUtility, Utility}; +use cfg_if::cfg_if; #[derive(RmcSerialize, Debug, Default, Clone)] #[rmc_struct(0)] @@ -13,13 +14,26 @@ pub struct ResultsRange { pub size: u32, } -impl ResultsRange { - pub fn make_from_list(&self, list: &[T]) -> Vec { - let end = usize::max(list.len(), self.offset as usize + self.size as usize); +cfg_if! { + if #[cfg(feature = "v3-8-13")] { + impl ResultsRange { + pub fn make_from_list(&self, list: &[T]) -> Vec { + let start = (self.offset as usize).min(list.len()); + let end = (start + self.size as usize).min(list.len()); - list.get(self.offset as usize..end) - .unwrap_or_default() - .into() + list[start..end].to_vec() + } + } + } else { + impl ResultsRange { + pub fn make_from_list(&self, list: &[T]) -> Vec { + let end = usize::max(list.len(), self.offset as usize + self.size as usize); + + list.get(self.offset as usize..end) + .unwrap_or_default() + .into() + } + } } }