mantra 0.3.0

`mantra` offers a lightweight approach for requirement tracing and coverage.
Documentation
use std::path::PathBuf;

use mantra::cmd::report::{Project, ReportFormat};

#[tokio::main]
async fn main() {
    env_logger::builder()
        .filter_level(log::LevelFilter::Warn)
        .init();

    let _ = std::fs::remove_file("mantra/examples/usage.db");
    let db = mantra::db::Config {
        url: Some("sqlite://mantra/examples/usage.db?mode=rwc".to_string()),
    };
    let root = PathBuf::from("mantra/examples/usage/");

    let extract_cfg = mantra::cfg::Config {
        db: db.clone(),
        cmd: mantra::cmd::Cmd::Extract(mantra::cmd::extract::Config {
            root: root.clone(),
            link: "https://github.com/mhatzl/mantra/tree/macros".to_string(),
            origin: mantra::cmd::extract::ExtractOrigin::GitHub,
            major_version: Some(0),
        }),
    };
    let trace_cfg = mantra::cfg::Config {
        db: db.clone(),
        cmd: mantra::cmd::Cmd::Trace(mantra::cmd::trace::Config {
            root,
            keep_root_absolute: false,
        }),
    };
    let coverage_cfg = mantra::cfg::Config {
        db: db.clone(),
        cmd: mantra::cmd::Cmd::Coverage(mantra::cmd::coverage::CliConfig {
            data_file: PathBuf::from("mantra/examples/usage/defmt_test.log"),
            cfg: mantra::cmd::coverage::Config {
                test_run: "test-run".to_string(),
                fmt: mantra::cmd::coverage::CoverageFormat::DefmtJson,
            },
        }),
    };
    let review_cfg = mantra::cfg::Config {
        db: db.clone(),
        cmd: mantra::cmd::Cmd::Review(mantra::cmd::review::ReviewConfig {
            reviews: vec![PathBuf::from("mantra/examples/my_review.toml")],
        }),
    };
    let report_cfg = mantra::cfg::Config {
        db,
        cmd: mantra::cmd::Cmd::Report(mantra::cmd::report::ReportConfig {
            path: PathBuf::from("mantra/examples/mantra_report.html"),
            template: None,
            formats: vec![ReportFormat::Json, ReportFormat::Html],
            project: Project {
                project_name: Some("mantra".to_string()),
                project_version: Some("1.0.1".to_string()),
                project_link: Some("https://github.com/mhatzl/mantra".to_string()),
            },
        }),
    };

    mantra::run(extract_cfg).await.unwrap();

    mantra::run(trace_cfg).await.unwrap();

    mantra::run(coverage_cfg).await.unwrap();

    mantra::run(review_cfg).await.unwrap();

    mantra::run(report_cfg).await.unwrap();
}