Skip to content

Wishlist: TryFrom<SmallVec<A>> for [T; N] #357

@ZhennanWu

Description

@ZhennanWu

This is an equivalent API of TryFrom<Vec<T>> for [T; N] which was stabilized in Rust 1.48.

Reason:

When using the smallvec crate in a message-passing context, I often find I using it as a container for payloads with pre-determined length.

fn send(&self) -> SmallVec<[i32; 2]> {
    smallvec![1, 2, 3]
}

fn recv(&mut self, msg: SmallVec<[Box<dyn Any>; 2]>) {
    let [a, b, c] = some_unwrap_magic!(msg);
    // ...
}

Now the only way to do this seems to be calling next().unwrap() on msg.into_iter(). But Vec provides a very nice way of doing this, and presumably more friendly to compiler optimizations:

let [a, b, c]: [Box<dyn Any>; 3] = msg.try_into().unwrap();

I wish this feature to make its way into ver 2.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions