Simplify parsing NonZeroU16
This commit is contained in:
parent
db5805b8db
commit
bb12ee81f5
@ -30,56 +30,57 @@ impl str::FromStr for PreRelease {
|
|||||||
type Err = Error;
|
type Err = Error;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let max = unsafe { NonZeroU16::new_unchecked(1025) };
|
||||||
match s {
|
match s {
|
||||||
"Alpha" | "alpha" => Ok(Self::Alpha(None)),
|
"Alpha" | "alpha" => Ok(Self::Alpha(None)),
|
||||||
"Beta" | "beta" => Ok(Self::Beta(None)),
|
"Beta" | "beta" => Ok(Self::Beta(None)),
|
||||||
"RC" | "Rc" | "rc" => Ok(Self::RC(None)),
|
"RC" | "Rc" | "rc" => Ok(Self::RC(None)),
|
||||||
s if s.starts_with("Alpha") => {
|
s if s.starts_with("Alpha") => {
|
||||||
let suf = s.strip_prefix("Alpha").unwrap();
|
let suf = s.strip_prefix("Alpha").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::Alpha(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::Alpha(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("alpha") => {
|
s if s.starts_with("alpha") => {
|
||||||
let suf = s.strip_prefix("alpha").unwrap();
|
let suf = s.strip_prefix("alpha").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::Alpha(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::Alpha(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("Beta") => {
|
s if s.starts_with("Beta") => {
|
||||||
let suf = s.strip_prefix("Beta").unwrap();
|
let suf = s.strip_prefix("Beta").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::Beta(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::Beta(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("beta") => {
|
s if s.starts_with("beta") => {
|
||||||
let suf = s.strip_prefix("beta").unwrap();
|
let suf = s.strip_prefix("beta").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::Beta(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::Beta(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("RC") => {
|
s if s.starts_with("RC") => {
|
||||||
let suf = s.strip_prefix("RC").unwrap();
|
let suf = s.strip_prefix("RC").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::RC(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::RC(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("Rc") => {
|
s if s.starts_with("Rc") => {
|
||||||
let suf = s.strip_prefix("Rc").unwrap();
|
let suf = s.strip_prefix("Rc").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::RC(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::RC(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s if s.starts_with("rc") => {
|
s if s.starts_with("rc") => {
|
||||||
let suf = s.strip_prefix("rc").unwrap();
|
let suf = s.strip_prefix("rc").unwrap();
|
||||||
match suf.parse::<u16>() {
|
match suf.parse() {
|
||||||
Ok(v) if v > 0 && v < 1025 => Ok(Self::RC(Some(v.try_into()?))),
|
Ok(v) if v < max => Ok(Self::RC(Some(v))),
|
||||||
_ => Err(Error::ParsePreRelease),
|
_ => Err(Error::ParsePreRelease),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user