changesette 6.3.0

A version and changelog manager using the changesets file format
use anyhow::Result;
use serde::Serialize;

use crate::{config::Config, output, skip::SkipSet, workspace::Workspace};

#[derive(Serialize)]
struct Package<'a> {
    name: &'a str,
    version: String,
    private: bool,
    dir: &'a str,
}

pub(crate) fn run(workspace: &Workspace, config: &Config, all: bool) -> Result<()> {
    let skip = SkipSet::load(workspace, config, &[])?;
    let mut packages = Vec::new();
    for member in workspace.members() {
        if !all && skip.contains(member.name()) {
            continue;
        }
        packages.push(Package {
            name: member.name(),
            version: member.version().to_string(),
            private: member.private(),
            dir: member.rel_dir(),
        });
    }
    output::print_json(&packages)?;
    Ok(())
}