- // `ctor` originally covered the range `(self_prefix + self_suffix..infinity)`. We
- // now split it into two: lengths smaller than `max_prefix_len + max_suffix_len`
- // are treated independently as fixed-lengths slices, and lengths above are
- // captured by a final VarLenSlice constructor.
- split_ctors.extend(
- (self_prefix + self_suffix..max_prefix_len + max_suffix_len).map(FixedLenSlice),
- );
- split_ctors.push(VarLenSlice(max_prefix_len, max_suffix_len));
+ match ctor {
+ LazyFixedLenSlice { len, .. } => {
+ if max_prefix_len + max_suffix_len < len {
+ split_ctors.push(LazyFixedLenSlice {
+ len,
+ prefix: max_prefix_len,
+ suffix: max_suffix_len,
+ });
+ } else {
+ split_ctors.push(FixedLenSlice(len));
+ }
+ }
+ _ => {
+ // `ctor` originally covered the range `(self_prefix + self_suffix..infinity)`. We
+ // now split it into two: lengths smaller than `max_prefix_len + max_suffix_len`
+ // are treated independently as fixed-lengths slices, and lengths above are
+ // captured by a final VarLenSlice constructor.
+ split_ctors.extend(
+ (self_prefix + self_suffix..max_prefix_len + max_suffix_len)
+ .map(FixedLenSlice),
+ );
+ split_ctors.push(VarLenSlice(max_prefix_len, max_suffix_len));
+ }
+ }