gr/cmds/
browse.rs

1use std::sync::Arc;
2
3use crate::cli::browse::BrowseOptions;
4use crate::config::ConfigProperties;
5use crate::remote;
6use crate::remote::CacheType;
7use crate::Result;
8
9pub fn execute(
10    options: BrowseOptions,
11    config: Arc<dyn ConfigProperties>,
12    domain: String,
13    path: String,
14) -> Result<()> {
15    match options {
16        BrowseOptions::Repo => {
17            // No need to contact the remote object, domain and path already
18            // computed.
19            let remote_url = format!("https://{}/{}", domain, path);
20            Ok(open::that(remote_url)?)
21        }
22        BrowseOptions::MergeRequests => {
23            let remote = remote::get_project(domain, path, config, None, CacheType::None)?;
24            Ok(open::that(remote.get_url(BrowseOptions::MergeRequests))?)
25        }
26        BrowseOptions::MergeRequestId(id) => {
27            let remote = remote::get_project(domain, path, config, None, CacheType::None)?;
28            Ok(open::that(
29                remote.get_url(BrowseOptions::MergeRequestId(id)),
30            )?)
31        }
32        BrowseOptions::Pipelines => {
33            let remote = remote::get_project(domain, path, config, None, CacheType::None)?;
34            Ok(open::that(remote.get_url(BrowseOptions::Pipelines))?)
35        }
36        BrowseOptions::PipelineId(id) => {
37            let remote = remote::get_project(domain, path, config, None, CacheType::None)?;
38            Ok(open::that(remote.get_url(BrowseOptions::PipelineId(id)))?)
39        }
40        BrowseOptions::Releases => {
41            let remote = remote::get_project(domain, path, config, None, CacheType::None)?;
42            Ok(open::that(remote.get_url(BrowseOptions::Releases))?)
43        }
44        BrowseOptions::Manual => Ok(open::that(crate::USER_GUIDE_URL)?),
45    }
46}