From 3f6225a5287ee10175c3f9a4f8443585368ac07a Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 1 Aug 2020 15:47:32 +0200 Subject: Move `github-suggestion-cli` to the root crate This will be used by the binaries. --- Cargo.lock | 3 ++ Cargo.toml | 4 +++ github-suggestion-cli/Cargo.toml | 9 ----- github-suggestion-cli/src/lib.rs | 75 ---------------------------------------- src/lib.rs | 75 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 84 deletions(-) delete mode 100644 github-suggestion-cli/Cargo.toml delete mode 100644 github-suggestion-cli/src/lib.rs create mode 100644 src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index bdbc2a7..43534f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,7 +276,10 @@ dependencies = [ name = "github-suggestion-cli" version = "0.0.1" dependencies = [ + "git2", "github-suggestion", + "thiserror", + "url", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8135a3e..355fd52 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,10 @@ version = "0.0.1" edition = "2018" [dependencies] +git2 = "0.13.8" +thiserror = "1.0.20" +url = "2.1.1" + github-suggestion = { path = "github-suggestion" } [workspace] diff --git a/github-suggestion-cli/Cargo.toml b/github-suggestion-cli/Cargo.toml deleted file mode 100644 index 0d07b7b..0000000 --- a/github-suggestion-cli/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "github-suggestion-cli" -version = "0.0.1" -edition = "2018" - -[dependencies] -git2 = "0.13.8" -thiserror = "1.0.20" -url = "2.1.1" 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 { - let url = Url::parse(s)?; - let path = url.path_segments() - .ok_or(OwnerRepoError::NoPath)? - .collect::>(); - - 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 { - 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()?) -} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..c0d97a2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,75 @@ +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 { + let url = Url::parse(s)?; + let path = url.path_segments() + .ok_or(OwnerRepoError::NoPath)? + .collect::>(); + + 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 { + 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()?) +} -- cgit v1.2.3