Skip to content

Commit

Permalink
Add proper README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Hubert Gruszecki committed Feb 5, 2021
1 parent ca990e9 commit ec38692
Showing 1 changed file with 43 additions and 119 deletions.
162 changes: 43 additions & 119 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,141 +1,65 @@

# cargo-readme

Generate README.md from doc comments.

Cargo subcommand that extract documentation from your crate's doc comments that you can use to
populate your README.md.

## Installation

```sh
cargo install cargo-readme
```
# stdin2file

## Motivation

As you write documentation, you often have to show examples of how to use your software. But
how do you make sure your examples are all working properly? That we didn't forget to update
them after a breaking change and left our (possibly new) users with errors they will have to
figure out by themselves?
A kind of tee-like program which writes stdin to file, and
optionally compresses it using multiple threads.
Also just a project-exercise for rust learning.

With `cargo-readme`, you just write the rustdoc, run the tests, and then run:
## Installation

```sh
cargo readme > README.md
```
Archives of precompiled binaries are available for linux.

And that's it! Your `README.md` is populated with the contents of the doc comments from your
`lib.rs` (or `main.rs`).
Other way is to clone project and compile it yourself.

## Usage

Let's take the following rust doc:

```rust
//! This is my awesome crate
//!
//! Here goes some other description of what it is and what is does
//!
//! # Examples
//! ```
//! fn sum2(n1: i32, n2: i32) -> i32 {
//! n1 + n2
//! }
//! # assert_eq!(4, sum2(2, 2));
//! ```
```sh
stdin2file 1.0
hugruu <[email protected]>
Write from stdin to file(s), optionally compresses it using given algorithm

USAGE:
stdin2file [OPTIONS] --chunk <chunk> --output <output>

FLAGS:
-h, --help Prints help information
-V, --version Prints version information

OPTIONS:
-c, --chunk <chunk> Maximum size of single file size [MiB]
-s, --compress <compress> Compression mode (currently only 'xz' is supported)
-m, --max-files <max-files> Number of rotated files
-o, --output <output> Output file
```

Running `cargo readme` will output the following:

~~~markdown
[![Build Status](__badge_image__)](__badge_url__)

# my_crate

This is my awesome crate

Here goes some other description of what it is and what is does

## Examples
```rust
fn sum2(n1: i32, n2: i32) -> i32 {
n1 + n2
}
```

License: MY_LICENSE
~~~

Let's see what's happened:

- a badge was created from the one defined in the `[badges]` section of `Cargo.toml`
- the crate name ("my-crate") was added
- "# Examples" heading became "## Examples"
- code block became "```rust"
- hidden line `# assert_eq!(4, sum2(2, 2));` was removed

`cargo-readme` also supports multiline doc comments `/*! */` (but you cannot mix styles):

~~~rust
/*!
This is my awesome crate
Here goes some other description of what it is and what is does
```
fn sum2(n1: i32, n2: i32) -> i32 {
n1 + n2
}
Copy stdin to 5 rotating files, each 1MiB before compression
```sh
$ command | stdin2file -c 1 -m 5 -o test -s xz
```
*/
~~~

If you have additional information that does not fit in doc comments, you can use a template.
Just create a file called `README.tpl` in the same directory as `Cargo.toml` with the following
content:

```tpl
{{badges}}

# {{crate}}
{{readme}}
Current version: {{version}}
Some additional info here
License: {{license}}
Split 10 MiB text file using above settings:
```sh
$ base64 /dev/urandom | head -c 10000000 | stdin2file -c 1 -m 5 -o test -s xz
```

The output will look like this

~~~markdown
[![Build Status](__badge_image__)](__badge_url__)

# my_crate

Current version: 3.0.0

This is my awesome crate

Here goes some other description of what it is and what is does

## Examples
```rust
fn sum2(n1: i32, n2: i32) -> i32 {
n1 + n2
}
This will result in 5 files:
```sh
$ ls -la
total 3600
-rw-rw-r-- 1 gruszeck gruszeck 806680 Feb 5 18:14 test.5.xz
-rw-rw-r-- 1 gruszeck gruszeck 806532 Feb 5 18:14 test.6.xz
-rw-rw-r-- 1 gruszeck gruszeck 806952 Feb 5 18:14 test.7.xz
-rw-rw-r-- 1 gruszeck gruszeck 806504 Feb 5 18:14 test.8.xz
-rw-rw-r-- 1 gruszeck gruszeck 433092 Feb 5 18:14 test.9.xz
```

Some additional info here

License: MY_LICENSE
~~~

By default, `README.tpl` will be used as the template, but you can override it using the
`--template` to choose a different template or `--no-template` to disable it.
## Possible improvements
* write proper tests
* add support for gz or lzma
* pass command as argument instead of pipe

## License

Expand Down

0 comments on commit ec38692

Please sign in to comment.