我有一个 Rust 库箱,其代码结构如下:
pub struct Foo<X> {
x: X,
}
pub fn foo() -> Foo<u32> {
// ...
}
// + private functions
特别是,虽然该库使用不同的变体Foo
内部(例如Foo<u8>
, Foo<u32>
), Foo
仅出现在库的公共 API 中,如下所示Foo<u32>
.
暴露泛型Foo
正如我目前所做的那样,使库的公共 API 及其文档变得不必要的复杂:用户永远不会得到Foo
从图书馆,这不是一个Foo<u32>
。因此,我只想以某种方式揭露并公开记录Foo<u32>
(最好使用不同的非通用名称,例如Bar
) 和做Foo
私人的。
我尝试过使用类型别名(type Bar = Foo<u32>
),但似乎这些会自动扩展cargo doc
(而且它们似乎也没有单独的可见性)。
我可能可以复制的定义Foo<X>
并称之为Bar
相反,然后实施类似的事情From<Foo<u32>>
for Bar
。然而,我的实际定义Foo<X>
相当复杂,所以我想避免这种情况。
还有其他方法可以实现我的目标吗?
您可以从父模块公开类型,如下所示:
mod prelude {
mod foo_mod {
pub struct Foo<X> {
x: X,
}
impl Foo<u32> {
pub fn foo() -> u32 {
32
}
}
impl Foo<u8> {
pub fn foo() -> u8 {
8
}
}
}
pub type FooBar = foo_mod::Foo<u32>;
}
fn main() {
use prelude::FooBar; // we can use this
use prelude::foo_mod::Foo; // we cannot use this
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)