Skip to content

Commit d520d6f

Browse files
Replace forgiving-semver with semver
forgiving-semver is incompatible with Rust ≥1.86— error[E0658]: custom inner attributes are unstable --> /build/little-a-map-0.13.5-vendor/forgiving-semver-parser-0.10.1/src/generated.rs:4:4 | 4 | #![rustfmt::skip] | ^^^^^^^^^^^^^ | = note: see issue #54726 <rust-lang/rust#54726> for more information —and unmaintained (porkbrain/forgiving-semver#1).
1 parent 0a9f20c commit d520d6f

File tree

5 files changed

+43
-68
lines changed

5 files changed

+43
-68
lines changed

Cargo.lock

Lines changed: 3 additions & 59 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ env_logger = "0.11.3"
3333
fastanvil = "0.31.0"
3434
fastnbt = "2.5.0"
3535
flate2 = { version = "1.0", features = ["zlib-ng"], default-features = false }
36-
forgiving-semver = { version = "0.11.0", features = ["serde"] }
3736
glob = "0.3"
3837
indicatif = { version = "0.17", features = ["rayon"] }
3938
itertools = "0.13"
4039
log = "0.4"
4140
once_cell = "1.4"
4241
paw = "1.0"
4342
rayon = "1.10"
43+
semver = "1.0"
4444
serde = { version = "1.0", features = ["derive"] }
4545
serde_json = "1.0"
4646
serde_with = { version = "3.0", features = ["json"] }

src/cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ fn validate_version<'de, D: Deserializer<'de>>(deserializer: D) -> Result<String
8888
#[cfg(test)]
8989
mod test {
9090
use super::*;
91-
use forgiving_semver::Version;
91+
use semver::Version;
9292
use serde_json::json;
9393

9494
fn next_version(text: impl AsRef<str>) -> String {
9595
let mut version = Version::parse(text.as_ref()).unwrap();
96-
version.increment_patch();
96+
version.patch += 1;
9797
version.to_string()
9898
}
9999

src/level.rs

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,50 @@ use super::COMPATIBLE_VERSIONS;
22
use crate::utilities::read_gz;
33
use anyhow::{Context, Result};
44
use fastnbt::from_bytes;
5-
use forgiving_semver::{Version, VersionReq};
5+
use semver::{Version, VersionReq};
6+
use serde::{de, Deserialize, Deserializer};
67
use std::path::Path;
78

8-
#[derive(serde_query::Deserialize)]
99
pub struct Level {
10-
#[query(".Data.SpawnX")]
1110
pub spawn_x: i32,
12-
#[query(".Data.SpawnZ")]
1311
pub spawn_z: i32,
14-
#[query(".Data.Version.Name")]
1512
pub version: Version,
1613
}
1714

15+
impl<'de> Deserialize<'de> for Level {
16+
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17+
#[derive(serde_query::Deserialize)]
18+
struct Internal {
19+
#[query(".Data.SpawnX")]
20+
spawn_x: i32,
21+
#[query(".Data.SpawnZ")]
22+
spawn_z: i32,
23+
#[query(".Data.Version.Name")]
24+
version: String,
25+
}
26+
27+
let mut internal = Internal::deserialize(deserializer)?;
28+
29+
// Workaround for dtolnay/semver#219
30+
internal.version.push_str(
31+
&".0".repeat(
32+
2 - internal
33+
.version
34+
.chars()
35+
.filter(|&c| c == '.')
36+
.take(2)
37+
.count(),
38+
),
39+
);
40+
41+
Ok(Self {
42+
spawn_x: internal.spawn_x,
43+
spawn_z: internal.spawn_z,
44+
version: Version::parse(&internal.version).map_err(de::Error::custom)?,
45+
})
46+
}
47+
}
48+
1849
impl Level {
1950
pub fn from_world_path(world_path: &Path) -> Result<Self> {
2051
let path = world_path.join("level.dat");

tests/worlds.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use forgiving_semver::VersionReq;
1+
use semver::VersionReq;
22
use glob::glob;
33
use image::{GenericImageView, Pixel};
44
use itertools::{assert_equal, Itertools};

0 commit comments

Comments
 (0)