reactive_graph/tooling/releases/
release_info.rs

1use crate::shared::output_format::RenderTable;
2use crate::tooling::releases::args::ReleaseArgs;
3use crate::tooling::releases::args::ReleaseInfoArgs;
4use crate::tooling::releases::args::ReleaseListArgs;
5use crate::tooling::releases::release::Release;
6use crate::tooling::releases::release_tag::RELEASE_TAG_NIGHTLY;
7use crate::tooling::releases::release_tag::ReleaseTag;
8use crate::tooling::releases::update_from_github::update_from_github;
9use crate::tooling::repository::Repository;
10use crate::tooling::repository::args::RepositoryArgs;
11use anyhow::Result;
12use self_update::cargo_crate_version;
13
14pub fn print_release_info(
15    repository_args: &RepositoryArgs,
16    default_repository: &Box<dyn Repository>,
17    release_args: &ReleaseArgs,
18    release_info_args: &ReleaseInfoArgs,
19) -> Result<()> {
20    let release_update = update_from_github(repository_args, default_repository, release_args)?;
21    let release_info = match ReleaseTag::from(release_args) {
22        ReleaseTag::Nightly => release_update.get_release_version(RELEASE_TAG_NIGHTLY),
23        ReleaseTag::Latest => release_update.get_latest_release(),
24        ReleaseTag::Current => release_update.get_release_version(cargo_crate_version!()),
25        ReleaseTag::Version(version) => release_update.get_release_version(&version),
26    }?;
27    vec![Release::from(&release_info)].print_table_and_exit(&release_info_args.output_format)
28}
29
30pub fn print_release_list(repository_args: &RepositoryArgs, default_repository: &Box<dyn Repository>, release_list_args: &ReleaseListArgs) -> Result<()> {
31    self_update::backends::github::ReleaseList::configure()
32        .repo_owner(&repository_args.repository_owner(default_repository))
33        .repo_name(&repository_args.repository_name(default_repository))
34        .build()?
35        .fetch()?
36        .iter()
37        .map(Release::from)
38        .collect::<Vec<Release>>()
39        .print_table_and_exit(&release_list_args.output_format);
40}