Avoid re-parsing regex

This commit is contained in:
Antoine Gersant 2024-08-09 12:26:40 -07:00
parent 763ba94e9b
commit 0841c15f48
2 changed files with 14 additions and 10 deletions

16
flake.lock generated
View file

@ -2,12 +2,12 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1721379653,
"narHash": "sha256-8MUgifkJ7lkZs3u99UDZMB4kbOxvMEXQZ31FO3SopZ0=",
"rev": "1d9c2c9b3e71b9ee663d11c5d298727dace8d374",
"revCount": 655136,
"lastModified": 1722813957,
"narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=",
"rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa",
"revCount": 662544,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.655136%2Brev-1d9c2c9b3e71b9ee663d11c5d298727dace8d374/0190cd4f-c0eb-72cb-834b-ac854aa282dc/source.tar.gz"
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.662544%2Brev-cb9a96f23c491c081b38eab96d22fa958043c9fa/0191261c-f106-7d9e-a0c0-f57924d24f7d/source.tar.gz"
},
"original": {
"type": "tarball",
@ -27,11 +27,11 @@
]
},
"locked": {
"lastModified": 1721355572,
"narHash": "sha256-I4TQ2guV9jTmZsXeWt5HMojcaqNZHII4zu0xIKZEovM=",
"lastModified": 1723170066,
"narHash": "sha256-SFkQfOA+8AIYJsPlQtxNP+z5jRLfz91z/aOrV94pPmw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "d5bc7b1b21cf937fb8ff108ae006f6776bdb163d",
"rev": "fecfe4d7c96fea2982c7907997b387a6b52c1093",
"type": "github"
},
"original": {

View file

@ -121,6 +121,9 @@ fn read_mp3<P: AsRef<Path>>(path: P) -> Result<SongMetadata, Error> {
}
mod ape_ext {
use regex::Regex;
use std::sync::LazyLock;
pub fn read_string(item: &ape::Item) -> Option<String> {
match item.value {
ape::ItemValue::Text(ref s) => Some(s.clone()),
@ -139,11 +142,12 @@ mod ape_ext {
}
}
static X_OF_Y_REGEX: LazyLock<Regex> = LazyLock::new(|| Regex::new(r#"^\d+"#).unwrap());
pub fn read_x_of_y(item: &ape::Item) -> Option<u32> {
match item.value {
ape::ItemValue::Text(ref s) => {
let format = regex::Regex::new(r#"^\d+"#).unwrap();
if let Some(m) = format.find(s) {
if let Some(m) = X_OF_Y_REGEX.find(s) {
s[m.start()..m.end()].parse().ok()
} else {
None