diff options
author | Teddy Wing | 2020-08-01 15:47:32 +0200 |
---|---|---|
committer | Teddy Wing | 2020-08-01 15:47:32 +0200 |
commit | 3f6225a5287ee10175c3f9a4f8443585368ac07a (patch) | |
tree | 5c3a9f41882608217b0c67c51cdcd16de91b8f5b /github-suggestion-cli/src/lib.rs | |
parent | fdc1cc7bc3d237ef4976f9f9d2ffc09b7ba164d5 (diff) | |
download | git-suggestion-3f6225a5287ee10175c3f9a4f8443585368ac07a.tar.bz2 |
Move `github-suggestion-cli` to the root crate
This will be used by the binaries.
Diffstat (limited to 'github-suggestion-cli/src/lib.rs')
-rw-r--r-- | github-suggestion-cli/src/lib.rs | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/github-suggestion-cli/src/lib.rs b/github-suggestion-cli/src/lib.rs deleted file mode 100644 index c0d97a2..0000000 --- a/github-suggestion-cli/src/lib.rs +++ /dev/null @@ -1,75 +0,0 @@ -use std::str::FromStr; - -use git2::Repository; -use thiserror::Error; -use url; -use url::Url; - - -#[derive(Debug, Error)] -pub enum Error { - #[error(transparent)] - Git(#[from] git2::Error), - - #[error(transparent)] - OwnerRepo(#[from] OwnerRepoError), - - #[error("Unable to find remote '{0}'")] - NoRemote(String), -} - -#[derive(Debug, Error)] -pub enum OwnerRepoError { - #[error("Unable to parse URL")] - Url(#[from] url::ParseError), - - #[error("URL has no path")] - NoPath, - - #[error("Unable to parse owner or repo")] - NoOwnerRepo, -} - - -#[derive(Debug)] -pub struct OwnerRepo { - pub owner: String, - pub repo: String, -} - -impl FromStr for OwnerRepo { - type Err = OwnerRepoError; - - fn from_str(s: &str) -> Result<Self, Self::Err> { - let url = Url::parse(s)?; - let path = url.path_segments() - .ok_or(OwnerRepoError::NoPath)? - .collect::<Vec<_>>(); - - if path.len() < 2 { - return Err(OwnerRepoError::NoOwnerRepo); - } - - Ok(OwnerRepo { - owner: path[0].to_owned(), - repo: path[1].to_owned(), - }) - } -} - -pub fn identifier_for_remote( - remote_name: Option<&str>, -) -> Result<OwnerRepo, Error> { - let repo = Repository::open(".")?; - - let remote_name = match remote_name { - Some(r) => r, - None => "origin", - }; - - let remote = repo.find_remote(remote_name)?; - let url = remote.url() - .ok_or_else(|| Error::NoRemote(remote_name.to_owned()))?; - - Ok(url.parse()?) -} |