Rust可以从crates.io上下载自己想要的包,开发者也可以将自己的包上传到crates.io上。
文档注释
在注释中提到过代码注释,这里再介绍一些文档注释。 Rust使用三斜杠(///)来书写文档注释,文档注释的内容可以被生成HTML文档。并且可以在文档注释中使用Markdown语法。
文档注释被放置在它说明的条目前。 例如:
/// 将传入的数字加1
///
/// # Examples
///
/// ```
/// let arg = 5;
/// let answer = my_crate::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
pub fn add_one(x: i32) -> i32 {
x + 1
}
可以通过执行cargo doc来基于文档注释在target/doc下生成HTML文档,调用的是rustdoc工具。
也可以执行cargo doc --open来生成并自动在浏览器中打开当前包的文档。
处理”Examples”区域,还经常使用另外一些区域:
- Panics:函数可能触发panic的场景。
- Errors:函数返回类型为Result时,指出可能出现的错误以及错误出现的原因。
- Safety:函数使用了unsafe关键字。指出当前函数不安全的原因以及确保的使用前提。
==cargo test会执行文档注释中的示例代码==。
还有一种注释类型//!,它是为包裹当前注释的外层条目添加文档,也就是在那个条目内部,这块注释就是谁的。这通常==用在包的根文件src/lib.rs上,为整个包或者整个模块添加注释的==。
使用pub use来导出公共API
作为库的开发者,需要为使用者提供公共API,使用pub use可以提供一套与内部结构不同的外部结构,这样无论内部结构多么复杂,使用者都只能看到对外提供的公共API的结构。
在文件开头使用pub use,将公开的条目重新导出顶层结构,例如
//! # Art
//!
//! A library for modeling artistic concepts.
pub use self::kinds::PrimaryColor;
pub use self::kinds::SecondaryColor;
pub use self::utils::mix;
pub mod kinds {
// --略--
}
pub mod utils {
// --略--
}在生成的既可以看到内部结构,也可以选择使用重新导出的结构。
在发布包到crates.io后,同样会将生成的文档作为包的文档,所以上面两步是很重要的。
创建crates.io账户
使用github账号登录crates.io来注册账号。获取到一个API令牌(账户设置页面)。
然后执行如下命令:
cargo login API令牌cargo会将API令牌存入~/.cargo/credentials文件中。
为包添加元数据
在发布之前需要在Cargo.toml文件下的[package]区域为包添加一些元数据。例如crates.io上包的命令都是独一无二的,并且先到先得,那么就需要确保name的独一无二。
[package]
name = "独一无二的包名"除了包名之外,还有一些必须信息:包的描述和许可协议。一个比较完整的示例如下:
[package]
name = "guessing_game"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
description = "A fun game where you guess what number the computer has chosen."
license = "MIT OR Apache-2.0"同时可以使用多个协议,如果使用的协议不在预置的协议中,那么可以不用license,而是使用license-file指定根目录下的自定义协议的文件名。
发布到crates.io
准备工作全部就绪,可以发布包了。
直接运行cargo publish即可,非常简单。
不过要注意发布到crates.io上的包是永久的,crates.io不允许用户删除已经发布的版本,也不能覆盖已经发布的版本。
只能不断发布新的版本。更改version字段即可。
使用cargo yank从crates.io上移除版本
crates.io上不能删除包,但是可以删除版本(只是版本而已,不包括版本的代码)。 如果一个包的版本出现异常,通过cargo yank撤回,可以阻止新的项目依赖这个版本的包。
不过旧的项目(已经产生Cargo.lock文件的项目)可以继续使用。
撤回的命令
cargo yank --vers 1.1.1取消撤回操作
cargo yank --vers 1.1.1 --undo