summaryrefslogtreecommitdiff
path: root/vendor/rustversion/src/release.rs
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-02 18:36:06 -0600
committermo khan <mo@mokhan.ca>2025-07-02 18:36:06 -0600
commit8cdfa445d6629ffef4cb84967ff7017654045bc2 (patch)
tree22f0b0907c024c78d26a731e2e1f5219407d8102 /vendor/rustversion/src/release.rs
parent4351c74c7c5f97156bc94d3a8549b9940ac80e3f (diff)
chore: add vendor directory
Diffstat (limited to 'vendor/rustversion/src/release.rs')
-rw-r--r--vendor/rustversion/src/release.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/vendor/rustversion/src/release.rs b/vendor/rustversion/src/release.rs
new file mode 100644
index 00000000..c8c02192
--- /dev/null
+++ b/vendor/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 })
+}