sync_readme/content/
badge.rs

1use crate::config::{Codecov, CustomBadge, Package};
2
3pub fn create(package: &Package) -> String {
4    let mut badges = Vec::new();
5
6    let Package {
7        name,
8        version,
9        license,
10        metadata,
11        ..
12    } = &package;
13
14    let badge_style = &metadata.badge_style;
15
16    if metadata.badges.docs_rs {
17        badges.push(format!("[![docs.rs](https://img.shields.io/docsrs/{name}/{version}.svg?logo=docs.rs&label=docs.rs&style={badge_style})](https://docs.rs/{name}/{version})"));
18    }
19
20    if metadata.badges.crates_io.release() {
21        badges.push(format!("[![crates.io](https://img.shields.io/badge/crates.io-v{version}-orange?style={badge_style}&logo=rust&logoColor=white)](https://crates.io/crates/{name}/{version})"));
22    }
23
24    if metadata.badges.license
25        && let Some(license) = license
26    {
27        badges.push(format!(
28            "![License: {license}](https://img.shields.io/badge/license-{escaped_license}-purple.svg?style={badge_style})",
29            escaped_license = license.replace(' ', "%20").replace('-', "--"),
30        ));
31    }
32
33    if metadata.badges.crates_io.size() {
34        badges.push(format!(
35            "![Crates.io Size](https://img.shields.io/crates/size/{name}/{version}.svg?style={badge_style})"
36        ));
37    }
38
39    if metadata.badges.crates_io.downloads() {
40        badges.push(format!("![Crates.io Downloads](https://img.shields.io/crates/dv/{name}/{version}.svg?&label=downloads&style={badge_style})"));
41    }
42
43    match &metadata.badges.codecov {
44        Codecov::Simple(false) => {},
45        Codecov::Simple(true) => {
46            badges.push(format!("[![Codecov](https://img.shields.io/codecov/c/github/scufflecloud/scuffle.svg?label=codecov&logo=codecov&style={badge_style})](https://app.codecov.io/gh/scufflecloud/scuffle)"))
47        },
48        Codecov::Complex { component } => {
49            badges.push(format!("[![Codecov](https://img.shields.io/codecov/c/github/scufflecloud/scuffle.svg?label=codecov&logo=codecov&style={badge_style}&component={component})](https://app.codecov.io/gh/scufflecloud/scuffle)"))
50        },
51    }
52
53    for CustomBadge { link, name: text, url } in &metadata.custom_badges {
54        let badge = format!("![{text}]({url})");
55        if let Some(link) = link {
56            badges.push(format!("[{badge}]({link})"))
57        } else {
58            badges.push(badge);
59        }
60    }
61
62    badges.join("\n")
63}