Expand description
A library for rustdocifying README.md for inclusion in lib.rs.
- Removes top-level header.
- Changes other headers to be one level higher.
- Converts package-internal
docs.rslinks to rustdoc format. - Doesn’t change anything within code blocks.
- (optional) Checks that converted links have correct version and crate name.
- No
unsafe. - No dependencies.
§Usage
- Add this to
Cargo.toml:
[build-dependencies]
readme-rustdocifier = "0.1.0"- Create
README.md. - Create
build.rswith following content:
use std::{env, error::Error, fs, path::PathBuf};
const CRATE_NAME: &str = "your_crate_name_here";
fn main() -> Result<(), Box<dyn Error>> {
println!("cargo:rerun-if-changed=README.md");
fs::write(
PathBuf::from(env::var("OUT_DIR")?).join("README-rustdocified.md"),
readme_rustdocifier::rustdocify(
&fs::read_to_string("README.md")?,
&env::var("CARGO_PKG_NAME")?,
Some(&env::var("CARGO_PKG_VERSION")?),
Some(CRATE_NAME),
)?,
)?;
Ok(())
}- Add this to start of
lib.rs:
#![doc = include_str!(concat!(env!("OUT_DIR"), "/README-rustdocified.md"))]- Run
cargo docand see the generated documentation of your library.
§Example README.md
## foo
A foo library.
### Usage
Create [`Foo::new`].
[`Foo::new`]: https://docs.rs/foo/*/foo/struct.Foo.html#method.newAbove README.md is rustdocified to:
A foo library.
## Usage
Create [`Foo::new`].
[`Foo::new`]: crate::Foo::new§Link conversions
Lines like [...]: https://docs.rs/PACKAGE/... are converted to rustdoc format.
Following conversions are done:
https://docs.rs/PACKAGE(1)crate
https://docs.rs/PACKAGE#fragment(1)crate#fragment
https://docs.rs/PACKAGE/VERSION(2)crate
https://docs.rs/PACKAGE/VERSION#fragment(2)crate#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES(2)crate::MODULES
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES#fragment(2)crate::MODULES#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.htmlcrate::MODULES::ENUM
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#method.METHODcrate::MODULES::ENUM::METHOD
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#variant.VARIANTcrate::MODULES::ENUM::VARIANT
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#fragmentcrate::MODULES::ENUM#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/fn.FUNCTION.htmlcrate::MODULES::FUNCTION
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/fn.FUNCTION.html#fragmentcrate::MODULES::FUNCTION#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/macro.MACRO.htmlcrate::MODULES::MACRO
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/macro.MACRO.html#fragmentcrate::MODULES::MACRO#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.htmlcrate::MODULES::STRUCT
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.html#method.METHODcrate::MODULES::STRUCT::METHOD
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.html#fragmentcrate::MODULES::STRUCT#fragment
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.htmlcrate::MODULES::TRAIT
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.html#tymethod.METHODcrate::MODULES::TRAIT::METHOD
https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.html#fragmentcrate::MODULES::TRAIT#fragment
Notes:
- (1) Can have optional
/at path end. - (2) Can have optional
/or/index.htmlat path end. /MODULESand corresponding::MODULEScan be empty.
§Safety
This crate doesn’t use any unsafe code.
This is enforced by #![forbid(unsafe_code)].
Enums§
- Error
- Error returned by
rustdocify.
Functions§
- rustdocify
- Rustdocifies the given readme.