magg 0.4.4

Opinionated tools for Rust devs
Documentation
//! # `README.md` file generator for crates in `ÐecisionToolkit` project.

use super::{LICENSE_COLOR, Path, Result, Write, utils};

/// Creates a `README.md` file for a crate in ÐecisionToolkit project.
pub fn get_readme_for_decision_toolkit_crate(file_name: impl AsRef<Path>) -> Result<String> {
    let mut output = String::new();
    let body = utils::read_file(file_name)?;
    let parsed_toml = utils::parse_toml("Cargo.toml")?;
    let package_name = utils::get_package_name(&parsed_toml);
    let repository_url = "https://github.com/DecisionToolkit/dsntk";
    let workflows = format!("{repository_url}/actions/workflows");
    // Write links to repository and organization.
    _ = writeln!(&mut output, "[dsntk] | [ÐecisionToolkit]");
    _ = writeln!(&mut output);
    // Write the name of the package.
    _ = writeln!(&mut output, "package_name");
    _ = writeln!(&mut output);
    // Write badges.
    _ = writeln!(&mut output, "[![crates.io][crates-badge]][crates-url]");
    _ = writeln!(&mut output, "[![docs][docs-badge]][docs-url]");
    _ = writeln!(&mut output, "[![coverage][cov-badge]][cov-url]");
    _ = writeln!(&mut output, "![build-linux-gnu][build-badge-linux-gnu]");
    _ = writeln!(&mut output, "![build-linux-musl][build-badge-linux-musl]");
    _ = writeln!(&mut output, "![build-macos][build-badge-macos]");
    _ = writeln!(
        &mut output,
        "![build-macos-aarch64][build-badge-macos-aarch64]"
    );
    _ = writeln!(&mut output, "![build-windows][build-badge-windows]");
    _ = writeln!(&mut output, "[![mit-license][mit-badge]][mit-license-url]");
    _ = writeln!(
        &mut output,
        "[![apache-license][apache-badge]][apache-license-url]"
    );
    _ = writeln!(&mut output, "[![cc][cc-badge]][cc-url]");
    _ = writeln!(&mut output);
    // Write links to badges and files.
    _ = writeln!(
        &mut output,
        "[crates-badge]: https://img.shields.io/crates/v/{package_name}.svg"
    );
    _ = writeln!(
        &mut output,
        "[crates-url]: https://crates.io/crates/{package_name}"
    );
    _ = writeln!(
        &mut output,
        "[docs-badge]: https://docs.rs/{package_name}/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[docs-url]: https://crates.io/crates/{package_name}"
    );
    _ = writeln!(
        &mut output,
        "[cov-badge]: https://img.shields.io/badge/coverage-0%25-21b577.svg"
    );
    _ = writeln!(&mut output, "[cov-url]: https://crates.io/crates/coverio");
    _ = writeln!(
        &mut output,
        "[build-badge-linux-gnu]: {workflows}/build-linux-gnu.yml/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[build-badge-linux-musl]: {workflows}/build-linux-musl.yml/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[build-badge-macos]: {workflows}/build-macos.yml/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[build-badge-macos-aarch64]: {workflows}/build-macos-aarch64.yml/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[build-badge-windows]: {workflows}/build-windows.yml/badge.svg"
    );
    _ = writeln!(
        &mut output,
        "[mit-badge]: https://img.shields.io/badge/License-MIT-{LICENSE_COLOR}.svg"
    );
    _ = writeln!(
        &mut output,
        "[mit-url]: https://opensource.org/licenses/MIT"
    );
    _ = writeln!(
        &mut output,
        "[mit-license-url]: {repository_url}/blob/main/LICENSE-MIT"
    );
    _ = writeln!(
        &mut output,
        "[apache-badge]: https://img.shields.io/badge/License-Apache%202.0-{LICENSE_COLOR}.svg"
    );
    _ = writeln!(
        &mut output,
        "[apache-url]: https://www.apache.org/licenses/LICENSE-2.0"
    );
    _ = writeln!(
        &mut output,
        "[apache-license-url]: {repository_url}/blob/main/LICENSE"
    );
    _ = writeln!(
        &mut output,
        "[apache-notice-url]: {repository_url}/blob/main/NOTICE"
    );
    _ = writeln!(
        &mut output,
        "[cc-badge]: https://img.shields.io/badge/Contributor%20Covenant-2.1-{LICENSE_COLOR}.svg"
    );
    _ = writeln!(
        &mut output,
        "[cc-url]: {repository_url}/blob/main/CODE_OF_CONDUCT.md"
    );
    _ = writeln!(&mut output, "[repository-url]: {repository_url}");
    _ = writeln!(
        &mut output,
        "[ÐecisionToolkit]: https://github.com/DecisionToolkit"
    );
    _ = writeln!(&mut output, "[dsntk]: https://crates.io/crates/dsntk");
    _ = writeln!(&mut output);
    // Write the content.
    _ = write!(&mut output, "{body}");
    _ = writeln!(&mut output);
    // Write license section.
    _ = writeln!(&mut output, "## License");
    _ = writeln!(&mut output);
    _ = writeln!(&mut output, "Licensed under either of");
    _ = writeln!(&mut output);
    _ = writeln!(
        &mut output,
        "- [MIT license][mit-url] (see [LICENSE-MIT][mit-license-url]) or"
    );
    _ = writeln!(
        &mut output,
        "- [Apache License, Version 2.0][apache-url] (see [LICENSE][apache-license-url] and [NOTICE][apache-notice-url])"
    );
    _ = writeln!(&mut output);
    _ = writeln!(&mut output, "at your option.");
    _ = writeln!(&mut output);
    // Write contribution section.
    _ = writeln!(&mut output, "## Contribution");
    _ = writeln!(&mut output);
    _ = writeln!(
        &mut output,
        "Any contributions to **[ÐecisionToolkit]** are greatly appreciated."
    );
    _ = writeln!(
        &mut output,
        "All contributions intentionally submitted for inclusion in the work by you,"
    );
    _ = writeln!(
        &mut output,
        "shall be dual licensed as above, without any additional terms or conditions."
    );
    Ok(output)
}