#vec #strongly-typed #derive-debug #indices #mixing #object #usize

keyed_vec

一个向量类型,其中键是自定义对象,以避免向量之间的索引混合

1 个不稳定版本

0.1.0 2023年8月15日

#5#mixing


用于 index_graph

GPL-3.0-only

18KB
335 代码行

一个向量类型,其中键是自定义对象,以避免向量之间的索引混合。

示例

use keyed_vec::{KeyedVec, IndexLike};

#[derive(Debug, Clone)]
struct Client {
    name: String,
}

#[derive(Debug, Clone)]
struct Order {
    address: String
}

#[derive(Debug, Clone, Copy)]
struct ClientId(usize);
impl IndexLike for ClientId {
    fn to_index(&self) -> usize {
        self.0
    }

    fn from_index(i: usize) -> Self {
        ClientId(i)
    }
}

#[derive(Debug, Clone, Copy)]
struct OrderId(usize);
impl IndexLike for OrderId {
    fn to_index(&self) -> usize {
        self.0
    }

    fn from_index(i: usize) -> Self {
        OrderId(i)
    }
}

let mut clients = KeyedVec::<ClientId, Client>::new();
let client_a = clients.push(Client { name: "A".to_string() });

let mut orders = KeyedVec::<OrderId, Order>::new();
let order_1 = orders.push(Order { address: "1".to_string() });

// mismatched types expected `ClientId`, found `OrderId`
clients.get(order_1);

依赖项

~1.5MB
~35K SLoC