1个不稳定版本

0.1.0 2020年3月27日

#1066音频

Download history 51/week @ 2024-04-05 69/week @ 2024-04-12 87/week @ 2024-04-19 106/week @ 2024-04-26 110/week @ 2024-05-03 55/week @ 2024-05-10 54/week @ 2024-05-17 52/week @ 2024-05-24 50/week @ 2024-05-31 43/week @ 2024-06-07 54/week @ 2024-06-14 55/week @ 2024-06-21 17/week @ 2024-06-28 19/week @ 2024-07-05 207/week @ 2024-07-12 255/week @ 2024-07-19

每月 502 次下载
用于 10 crate

MIT/Apache

21KB
187

支持URID的库。

在RDF的世界里,资源是通过URI进行描述的。在Rust中,这个概念可以通过UriBound trait来描述具有URI的类型。然后,其他crate可以使用这些URI来描述类型或值之间的关系。

然而,比较URI不一定快。因此,引入了另一个概念:URID。URID基本上是一个表示URI的u32。这些URID由一个Map分配,并且可以通过一个Unmap进行“取消引用”。

这个库还支持通过泛型参数将URID连接到它们的UriBound。例如,这可以用来将某个特定约束的URID作为函数的参数请求。如果有人尝试用错误的URID调用这个函数,编译器将在代码编译之前抛出错误。

现在这可能看起来微不足道,但音频插件框架rust-lv2严重依赖这个crate进行快速、可移植和动态的数据识别和交换。

示例

use urid::*;

// Some types with URIs. The attribute implements `UriBound` with the given URI.
#[uri("urn:urid-example:my-struct-a")]
struct MyStructA;

#[uri("urn:urid-example:my-struct-b")]
struct MyStructB;

// A collection of URIDs that can be created by a mapper with one method call.
#[derive(URIDCollection)]
struct MyURIDCollection {
    my_struct_a: URID<MyStructA>,
    my_struct_b: URID<MyStructB>,
}

// A function that checks whether the unmapper behaves correctly.
// Due to the type argument, it can not be misused.
fn test_unmapper<M: Unmap, T: UriBound>(unmap: &M, urid: URID<T>) {
    assert_eq!(T::uri(), unmap.unmap(urid).unwrap());
}

// Create a simple mapper. The `HashURIDMapper` is thread-safe and can map and unmap all URIs.
let map = HashURIDMapper::new();

// Get the URIDs of the structs. You can use the collection or retrieve individual URIDs.
let urids: MyURIDCollection = map.populate_collection().unwrap();
let urid_a: URID<MyStructA> = map.map_type().unwrap();

// You can also retrieve the URID of a single URI without a binding to a type.
let urid_b: URID = map.map_str("https://rustup.rs").unwrap();

test_unmapper(&map, urids.my_struct_a);
test_unmapper(&map, urids.my_struct_b);
test_unmapper(&map, urid_a);

许可

根据以下之一许可

由您选择。

依赖关系

~1.5MB
~34K SLoC