在我的另一个问题中,我询问了如何仅公开公开Foo<u32>
私有泛型类型 ( ) 的具体变体 ( Foo<T>
)。建议的解决方案如下:
mod internal {
/// Private documentation of `Foo`.
pub struct Foo<X> {
/// Private documentation of `x`.
pub x: X,
}
impl Foo<u32> {
pub fn foo() -> u32 {
32
}
}
impl Foo<u8> {
pub fn foo() -> u8 {
8
}
}
}
/// Public documentation of `FooBar`.
pub type FooBar = internal::Foo<u32>;
这有效,因为公共 API 只包含FooBar
,但不包含Foo
。但是,从文档的角度来看,它是缺乏的。这是cargo doc
for的输出FooBar
:
如你看到的,
- 私有类型
Foo
出现在文档中,但它不是链接,Foo
也没有单独的 - 的私人文档和 的私人文档
Foo
均未Foo.x
显示
因此,该文档并不是真正有用的。显然,我可以在 的文档中添加更多信息FooBar
,但这仍然不会使 的文档FooBar
看起来像常规的struct
.
使用这种方法,文档FooBar
显然不如这样的“等效”定义FooBar
:
/// Public documentation of `FooBar`.
pub struct FooBar {
/// Public documentation of `x`.
x: u32,
}
我将“等价物”放在引号中,因为我确实假设从编译器的角度来看(显然是 的cargo doc
),这两个定义FooBar
是完全不同的。我的问题是我的文档的读者不必关心这种差异。
在这种情况下,有没有办法实现“自然”文档?
如果有必要,我很乐意使用完全不同的方法来隐藏通用Foo
定义。