Add Service trait to remove code duplication

This commit is contained in:
Valentin Brandl 2019-04-29 20:37:53 +02:00
parent a1c10938c5
commit fa2e06fccf
No known key found for this signature in database
GPG Key ID: 30D341DD34118D7D

47
src/service.rs Normal file
View File

@ -0,0 +1,47 @@
pub(crate) trait Service {
fn domain() -> &'static str;
fn url_path() -> &'static str;
fn commit_url(repo: &str, commit_ref: &str) -> String;
}
pub(crate) struct GitHub;
impl Service for GitHub {
fn domain() -> &'static str {
"github.com"
}
fn url_path() -> &'static str {
"github"
}
fn commit_url(repo: &str, commit_ref: &str) -> String {
format!("https://{}/{}/commit/{}", Self::domain(), repo, commit_ref)
}
}
pub(crate) struct Gitlab;
impl Service for Gitlab {
fn domain() -> &'static str {
"gitlab.com"
}
fn url_path() -> &'static str {
"gitlab"
}
fn commit_url(repo: &str, commit_ref: &str) -> String {
format!("https://{}/{}/commit/{}", Self::domain(), repo, commit_ref)
}
}
pub(crate) struct Bitbucket;
impl Service for Bitbucket {
fn domain() -> &'static str {
"bitbucket.org"
}
fn url_path() -> &'static str {
"bitbucket"
}
fn commit_url(repo: &str, commit_ref: &str) -> String {
format!("https://{}/{}/commits/{}", Self::domain(), repo, commit_ref)
}
}