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 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}