summaryrefslogtreecommitdiffstats
path: root/rich_crate/src/lib.rs
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2020-03-21 17:28:33 +0000
committerKornel <kornel@geekhood.net>2020-03-21 17:28:33 +0000
commitc7aed28a777b9728765f8ff4a6f16fac886bc89e (patch)
tree4509a36e71fc7d0e728fad187d2b3bfc8f238702 /rich_crate/src/lib.rs
parent2f9e736ca8d6728d572c5ebf6dca5013b4215051 (diff)
Don't panic on bad crate names
Diffstat (limited to 'rich_crate/src/lib.rs')
-rw-r--r--rich_crate/src/lib.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/rich_crate/src/lib.rs b/rich_crate/src/lib.rs
index 1b19abf..40f63a2 100644
--- a/rich_crate/src/lib.rs
+++ b/rich_crate/src/lib.rs
@@ -33,19 +33,39 @@ impl fmt::Debug for Origin {
}
impl Origin {
+ #[inline]
pub fn from_crates_io_name(name: &str) -> Self {
- assert!(!name.is_empty() && is_alnum(name), "bad crate name: '{}'", name);
- Origin::CratesIo(name.to_ascii_lowercase().into())
+ match Self::try_from_crates_io_name(name) {
+ Some(n) => n,
+ None => panic!("bad crate name: '{}'", name),
+ }
+ }
+
+ #[inline]
+ pub fn try_from_crates_io_name(name: &str) -> Option<Self> {
+ if Self::is_valid_crate_name(name) {
+ Some(Origin::CratesIo(name.to_ascii_lowercase().into()))
+ } else {
+ None
+ }
}
+ #[inline(always)]
+ pub fn is_valid_crate_name(name: &str) -> bool {
+ !name.is_empty() && is_alnum(name)
+ }
+
+ #[inline]
pub fn from_github(repo: SimpleRepo, package: impl Into<Box<str>>) -> Self {
Origin::GitHub { repo, package: package.into() }
}
+ #[inline]
pub fn from_gitlab(repo: SimpleRepo, package: impl Into<Box<str>>) -> Self {
Origin::GitLab { repo, package: package.into() }
}
+ #[inline]
pub fn from_repo(r: &Repo, package: &str) -> Option<Self> {
match r.host() {
RepoHost::GitHub(r) => Some(Self::from_github(r.clone(), package)),
@@ -83,6 +103,7 @@ impl Origin {
}
}
+ #[inline]
pub fn short_crate_name(&self) -> &str {
match *self {
Origin::CratesIo(ref s) => s,