7个不稳定版本 (3个破坏性更改)

0.4.2 2023年4月10日
0.4.1 2023年4月4日
0.3.0 2023年4月4日
0.2.1 2023年4月3日
0.1.0 2023年3月27日

#1199 in 数据结构

每月下载 35

MIT 许可证

31KB
359

granular-id

Crates.io Docs.rs License: MIT

此包提供了一个数据类型 GranularId<T>,可以表示任意精度的ID号码。

功能

  • GranularId<T> 是一个类型为 T 的组件序列,可以进行排序和比较。
  • 在任意两个 GranularId<T> 之间,存在无限多个更细粒度的ID。
  • GranularId<T> 最好与任何无大小整数类型一起使用,例如 u8u16u32 等。
  • GranularId<T> 还可以与实现适当 num_traits 的任何类型一起使用。
  • GranularId<T> 有方法可以访问其父级、子级、兄弟级以及树状结构中的其他关系。

示例用法

use granular_id::GranularId;

fn test() {
    // Create a new GranularId from a vec of u8 (id: 1.2.3)
    let id: GranularId<u8> = vec![1, 2, 3].into();

    // Get the parent ID (id: 1.2)
    let parent = id.parent().unwrap();
    assert_eq!(parent, vec![1, 2].into());

    // Iterate over the following siblings of 1.2.3
    let mut next_siblings = id.next_siblings();
    // First one is 1.2.4
    assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 4].into());
    // Then, 1.2.5, etc
    assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 5].into());
    assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 6].into());

    // Get an iterator over childrens of 1.2.3
    let mut children = id.children();
    // First one is 1.2.3.0
    assert_eq!(children.next().unwrap(), vec![1, 2, 3, 0].into());
    // Then, 1.2.3.1, etc
    assert_eq!(children.next().unwrap(), vec![1, 2, 3, 1].into());
    assert_eq!(children.next().unwrap(), vec![1, 2, 3, 2].into());

    // Each parent is always smaller than all of its children
    assert!(parent < id);
}

安装

将此添加到您的 Cargo.toml

[dependencies]
granular-id = "0.4.2"

许可证

本项目采用MIT许可证。有关详细信息,请参阅 LICENSE

依赖关系

~150KB