Skip to content

Commit 1ec7cb5

Browse files
committed
clippy
1 parent fffd47c commit 1ec7cb5

14 files changed

Lines changed: 110 additions & 113 deletions

File tree

src/bulk_text/mod.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,20 @@ fn parse_text_urls(content: &str) -> Result<Vec<ZoomableImageUrl>, BulkTextError
125125
/// Extract a title from a URL for better identification
126126
fn extract_title_from_url(url: &str, line_number: usize) -> Option<String> {
127127
// Try to extract filename from URL
128-
if let Ok(parsed_url) = url::Url::parse(url) {
129-
if let Some(segments) = parsed_url.path_segments() {
130-
let segments: Vec<&str> = segments.collect();
131-
if let Some(last_segment) = segments.iter().rev().find(|s| !s.is_empty()) {
132-
// Remove file extension for a cleaner title
133-
let title = if let Some(dot_pos) = last_segment.rfind('.') {
134-
&last_segment[..dot_pos]
135-
} else {
136-
last_segment
137-
};
138-
139-
if !title.is_empty() {
140-
return Some(title.to_string());
141-
}
128+
if let Ok(parsed_url) = url::Url::parse(url)
129+
&& let Some(segments) = parsed_url.path_segments()
130+
{
131+
let segments: Vec<&str> = segments.collect();
132+
if let Some(last_segment) = segments.iter().rev().find(|s| !s.is_empty()) {
133+
// Remove file extension for a cleaner title
134+
let title = if let Some(dot_pos) = last_segment.rfind('.') {
135+
&last_segment[..dot_pos]
136+
} else {
137+
last_segment
138+
};
139+
140+
if !title.is_empty() {
141+
return Some(title.to_string());
142142
}
143143
}
144144
}

src/dezoomer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub struct DezoomerInputWithContents<'a> {
4444
}
4545

4646
impl DezoomerInput {
47-
pub fn with_contents(&self) -> Result<DezoomerInputWithContents, DezoomerError> {
47+
pub fn with_contents(&self) -> Result<DezoomerInputWithContents<'_>, DezoomerError> {
4848
match &self.contents {
4949
PageContents::Unknown => Err(DezoomerError::NeedsData {
5050
uri: self.uri.clone(),

src/encoder/png_encoder.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,17 @@ impl Encoder for PngEncoder {
9999
let icc_profile = tile.icc_profile.as_ref();
100100
let exif_metadata = tile.exif_metadata.as_ref();
101101

102-
if icc_profile.is_some() {
102+
if let Some(profile) = icc_profile {
103103
log::debug!(
104104
"Using ICC profile from first tile (size: {} bytes)",
105-
icc_profile.unwrap().len()
105+
profile.len()
106106
);
107107
}
108108

109-
if exif_metadata.is_some() {
109+
if let Some(exif) = exif_metadata {
110110
log::debug!(
111111
"Using EXIF metadata from first tile (size: {} bytes)",
112-
exif_metadata.unwrap().len()
112+
exif.len()
113113
);
114114
}
115115

src/google_arts_and_culture/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ fn post_process_tile(
129129
_tile: &TileReference,
130130
data: Vec<u8>,
131131
) -> Result<Vec<u8>, Box<dyn Error + Send + 'static>> {
132-
decryption::decrypt(data).map_err(|e| Box::new(e) as Box<(dyn Error + Send + 'static)>)
132+
decryption::decrypt(data).map_err(|e| Box::new(e) as Box<dyn Error + Send + 'static>)
133133
}
134134

135135
impl std::fmt::Debug for GAPZoomLevel {

src/google_arts_and_culture/tile_info.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,17 @@ fn decode_html_entities(text: &str) -> String {
9595
if let Some(stripped) = entity.strip_prefix('#') {
9696
if let Some(hex_stripped) = entity.strip_prefix("#x") {
9797
// Hexadecimal
98-
if let Ok(code) = u32::from_str_radix(hex_stripped, 16) {
99-
if let Some(ch) = std::char::from_u32(code) {
100-
return ch.to_string();
101-
}
98+
if let Ok(code) = u32::from_str_radix(hex_stripped, 16)
99+
&& let Some(ch) = std::char::from_u32(code)
100+
{
101+
return ch.to_string();
102102
}
103103
} else {
104104
// Decimal
105-
if let Ok(code) = stripped.parse::<u32>() {
106-
if let Some(ch) = std::char::from_u32(code) {
107-
return ch.to_string();
108-
}
105+
if let Ok(code) = stripped.parse::<u32>()
106+
&& let Some(ch) = std::char::from_u32(code)
107+
{
108+
return ch.to_string();
109109
}
110110
}
111111
}

src/iiif/manifest_types.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ impl IiifLabel {
2222
IiifLabel::String(s) if !s.is_empty() => Some(s.clone()),
2323
IiifLabel::String(_) => None, // Empty string
2424
IiifLabel::Map(map) => {
25-
if let Some(en_labels) = map.get("en") {
26-
if let Some(first_en) = en_labels.first().filter(|s| !s.is_empty()) {
27-
return Some(first_en.clone());
28-
}
25+
if let Some(en_labels) = map.get("en")
26+
&& let Some(first_en) = en_labels.first().filter(|s| !s.is_empty())
27+
{
28+
return Some(first_en.clone());
2929
}
3030
// Fallback to the first non-empty label in the first language found
3131
map.values()
@@ -47,10 +47,10 @@ pub struct MetadataEntry {
4747
impl MetadataEntry {
4848
/// Get the metadata title if this entry is a title field
4949
pub fn get_title(&self) -> Option<String> {
50-
if let Some(label) = self.label.get_english_or_first() {
51-
if label.to_lowercase() == "title" {
52-
return self.value.get_english_or_first();
53-
}
50+
if let Some(label) = self.label.get_english_or_first()
51+
&& label.to_lowercase() == "title"
52+
{
53+
return self.value.get_english_or_first();
5454
}
5555
None
5656
}

src/iiif/mod.rs

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,16 @@ pub fn determine_title(image_info: &manifest_types::ExtractedImageInfo) -> Optio
4949
parts.push(manifest_label.as_str());
5050
}
5151

52-
if let Some(metadata_title) = &image_info.metadata_title {
53-
if !parts.contains(&metadata_title.as_str()) {
54-
parts.push(metadata_title.as_str());
55-
}
52+
if let Some(metadata_title) = &image_info.metadata_title
53+
&& !parts.contains(&metadata_title.as_str())
54+
{
55+
parts.push(metadata_title.as_str());
5656
}
5757

58-
if let Some(canvas_label) = &image_info.canvas_label {
59-
if !parts.contains(&canvas_label.as_str()) {
60-
parts.push(canvas_label.as_str());
61-
}
58+
if let Some(canvas_label) = &image_info.canvas_label
59+
&& !parts.contains(&canvas_label.as_str())
60+
{
61+
parts.push(canvas_label.as_str());
6262
}
6363

6464
if parts.is_empty() {
@@ -98,48 +98,47 @@ impl Dezoomer for IIIF {
9898

9999
// First, try to determine what type of IIIF content this is by doing a quick parse
100100
// to check the "type" field without generating warnings
101-
if let Ok(quick_check) = serde_json::from_slice::<serde_json::Value>(contents) {
102-
if let Some(type_value) = quick_check.get("type").or_else(|| quick_check.get("@type")) {
103-
if let Some(type_str) = type_value.as_str() {
104-
match type_str {
105-
"ImageService2" | "ImageService3" | "iiif:ImageProfile" => {
106-
// This is clearly an Image Service info.json, try parsing it directly
107-
match zoom_levels(uri, contents) {
108-
Ok(levels) => {
109-
let image = IIIFZoomableImage::new(levels, None);
110-
return Ok(dezoomer_result_from_single_image(image));
111-
}
112-
Err(e) => return Err(e.into()),
113-
}
101+
if let Ok(quick_check) = serde_json::from_slice::<serde_json::Value>(contents)
102+
&& let Some(type_value) = quick_check.get("type").or_else(|| quick_check.get("@type"))
103+
&& let Some(type_str) = type_value.as_str()
104+
{
105+
match type_str {
106+
"ImageService2" | "ImageService3" | "iiif:ImageProfile" => {
107+
// This is clearly an Image Service info.json, try parsing it directly
108+
match zoom_levels(uri, contents) {
109+
Ok(levels) => {
110+
let image = IIIFZoomableImage::new(levels, None);
111+
return Ok(dezoomer_result_from_single_image(image));
114112
}
115-
"Manifest" => {
116-
// This is clearly a manifest, try parsing it as such
117-
match parse_iiif_manifest_from_bytes(contents, uri) {
118-
Ok(image_infos) if !image_infos.is_empty() => {
119-
let image_urls: Vec<ZoomableImageUrl> = image_infos
120-
.into_iter()
121-
.map(|image_info| {
122-
let title = determine_title(&image_info);
123-
ZoomableImageUrl {
124-
url: image_info.image_uri,
125-
title,
126-
}
127-
})
128-
.collect();
129-
130-
return Ok(dezoomer_result_from_urls(image_urls));
131-
}
132-
Ok(_) => {
133-
// Empty image_infos, fall through to heuristic approach
134-
}
135-
Err(e) => return Err(e.into()),
136-
}
113+
Err(e) => return Err(e.into()),
114+
}
115+
}
116+
"Manifest" => {
117+
// This is clearly a manifest, try parsing it as such
118+
match parse_iiif_manifest_from_bytes(contents, uri) {
119+
Ok(image_infos) if !image_infos.is_empty() => {
120+
let image_urls: Vec<ZoomableImageUrl> = image_infos
121+
.into_iter()
122+
.map(|image_info| {
123+
let title = determine_title(&image_info);
124+
ZoomableImageUrl {
125+
url: image_info.image_uri,
126+
title,
127+
}
128+
})
129+
.collect();
130+
131+
return Ok(dezoomer_result_from_urls(image_urls));
137132
}
138-
_ => {
139-
// Unknown type, fall through to heuristic detection below
133+
Ok(_) => {
134+
// Empty image_infos, fall through to heuristic approach
140135
}
136+
Err(e) => return Err(e.into()),
141137
}
142138
}
139+
_ => {
140+
// Unknown type, fall through to heuristic detection below
141+
}
143142
}
144143
}
145144

src/iiif/tile_info.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl ImageInfo {
6767
}
6868
}
6969

70-
fn profile_info(&self) -> Cow<ProfileInfo> {
70+
fn profile_info(&self) -> Cow<'_, ProfileInfo> {
7171
self.profile
7272
.as_ref()
7373
.map(|p| p.profile_info())
@@ -172,14 +172,13 @@ impl ImageInfo {
172172
/// Some info.json files contain a an invalid value for "@id",
173173
/// such as "localhost" or "example.com"
174174
pub fn remove_test_id(&mut self) {
175-
if let Some(id) = &self.id {
176-
if Regex::new(r"^https?://((www\.)?example\.|localhost)")
175+
if let Some(id) = &self.id
176+
&& Regex::new(r"^https?://((www\.)?example\.|localhost)")
177177
.unwrap()
178178
.is_match(id)
179-
{
180-
info!("Removing probably invalid IIIF id '{id}'");
181-
self.id = None;
182-
}
179+
{
180+
info!("Removing probably invalid IIIF id '{id}'");
181+
self.id = None;
183182
}
184183
}
185184

@@ -244,12 +243,12 @@ impl ProfileInfo {
244243
let max_height = self.max_height.unwrap_or(max_width);
245244
size.y = size.y.min(max_height);
246245
}
247-
if let Some(max_area) = self.max_area {
248-
if size.area() > max_area {
249-
let sqrt = ((max_area as f64).sqrt()) as u32;
250-
size.y = sqrt.min(size.y);
251-
size.x = sqrt.min(size.x);
252-
}
246+
if let Some(max_area) = self.max_area
247+
&& size.area() > max_area
248+
{
249+
let sqrt = ((max_area as f64).sqrt()) as u32;
250+
size.y = sqrt.min(size.y);
251+
size.x = sqrt.min(size.x);
253252
}
254253
size
255254
}
@@ -267,7 +266,7 @@ lazy_static! {
267266
}
268267

269268
impl Profile {
270-
fn profile_info(&self) -> Cow<ProfileInfo> {
269+
fn profile_info(&self) -> Cow<'_, ProfileInfo> {
271270
match self {
272271
Profile::Reference(s) => {
273272
PROFILE_REFERENCES

src/iipimage/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,10 @@ impl FromStr for Metadata {
129129
if let (Some(x), Some(y)) = (n1, n2) {
130130
tile_size = Ok(Vec2d { x, y })
131131
}
132-
} else if key.eq_ignore_ascii_case("resolution-number") {
133-
if let Some(n) = n1 {
134-
levels = Ok(n)
135-
}
132+
} else if key.eq_ignore_ascii_case("resolution-number")
133+
&& let Some(n) = n1
134+
{
135+
levels = Ok(n)
136136
}
137137
}
138138
Ok(Metadata {

src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@ fn choose_level(mut levels: Vec<ZoomLevel>, args: &Arguments) -> Result<ZoomLeve
161161
return Ok(levels.swap_remove(actual_level));
162162
}
163163

164-
if let Some(best_size) = args.best_size(levels.iter().filter_map(|l| l.size_hint())) {
165-
if let Some(pos) = find_level_with_size(&levels, best_size) {
166-
return Ok(levels.swap_remove(pos));
167-
}
164+
if let Some(best_size) = args.best_size(levels.iter().filter_map(|l| l.size_hint()))
165+
&& let Some(pos) = find_level_with_size(&levels, best_size)
166+
{
167+
return Ok(levels.swap_remove(pos));
168168
}
169169

170170
level_picker(levels)

0 commit comments

Comments
 (0)