summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rustversion/src/release.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /third_party/rust/rustversion/src/release.rs
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/rustversion/src/release.rs')
-rw-r--r--third_party/rust/rustversion/src/release.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/third_party/rust/rustversion/src/release.rs b/third_party/rust/rustversion/src/release.rs
new file mode 100644
index 0000000000..3f421c6579
--- /dev/null
+++ b/third_party/rust/rustversion/src/release.rs
@@ -0,0 +1,34 @@
+use crate::error::{Error, Result};
+use crate::iter::Iter;
+use crate::token;
+use proc_macro::Group;
+
+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
+pub struct Release {
+ pub minor: u16,
+ pub patch: Option<u16>,
+}
+
+pub fn parse(paren: Group, iter: Iter) -> Result<Release> {
+ try_parse(iter).map_err(|_| Error::group(paren, "expected rustc release number, like 1.31"))
+}
+
+fn try_parse(iter: Iter) -> Result<Release, ()> {
+ let major_minor = token::parse_literal(iter).map_err(drop)?;
+ let string = major_minor.to_string();
+
+ if !string.starts_with("1.") {
+ return Err(());
+ }
+
+ let minor: u16 = string[2..].parse().map_err(drop)?;
+
+ let patch = if token::parse_optional_punct(iter, '.').is_some() {
+ let int = token::parse_literal(iter).map_err(drop)?;
+ Some(int.to_string().parse().map_err(drop)?)
+ } else {
+ None
+ };
+
+ Ok(Release { minor, patch })
+}