diff --git a/src/compiler/rust/smallvec.rs b/src/compiler/rust/smallvec.rs index 77c247f6267..82691b5a34a 100644 --- a/src/compiler/rust/smallvec.rs +++ b/src/compiler/rust/smallvec.rs @@ -138,3 +138,25 @@ impl From> for SmallVec { } } } + +impl From<[T; N]> for SmallVec { + fn from(i: [T; N]) -> SmallVec { + i.into_iter().collect() + } +} + +impl FromIterator for SmallVec { + fn from_iter(iter: I) -> Self + where + I: IntoIterator, + { + let mut iter = iter.into_iter(); + let Some(x) = iter.next() else { + return SmallVec::None; + }; + let Some(y) = iter.next() else { + return SmallVec::One(x); + }; + SmallVec::Many([x, y].into_iter().chain(iter).collect()) + } +}