From 4e3cfe403115dac1e8a4baf91fee794a773383a2 Mon Sep 17 00:00:00 2001 From: Sam Denty Date: Tue, 2 Feb 2021 15:57:40 +0000 Subject: [PATCH] fixes --- Cargo.lock | 50 ++++++++----------------------- Cargo.toml | 2 -- README.md | 2 +- src/icon_info.rs | 70 +++++++++++++++++++++---------------------- src/icon_size/jpeg.rs | 1 - src/icon_size/mod.rs | 13 ++------ src/icon_size/png.rs | 1 - src/icons.rs | 4 +-- src/macros.rs | 8 +++++ 9 files changed, 60 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa94a0a..b926f80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,12 +95,6 @@ version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -309,7 +303,7 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -494,7 +488,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] @@ -505,7 +499,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] @@ -677,7 +671,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -737,7 +731,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -775,12 +769,6 @@ version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "mime" version = "0.3.16" @@ -888,7 +876,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "foreign-types", "lazy_static", "libc", @@ -937,7 +925,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall 0.1.57", @@ -1552,7 +1540,6 @@ dependencies = [ "mime_4", "once_cell", "percent-encoding", - "pin-utils", "regex", "reqwest-wasm", "scraper", @@ -1562,7 +1549,6 @@ dependencies = [ "tokio 1.1.0", "tokio-futures-byteorder", "url", - "wee_alloc", ] [[package]] @@ -1583,7 +1569,7 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "winapi", ] @@ -1706,7 +1692,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "rand 0.8.3", "redox_syscall 0.2.4", @@ -1913,7 +1899,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "pin-project-lite 0.2.4", "tracing-core", ] @@ -2044,7 +2030,7 @@ version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "serde", "serde_json", "wasm-bindgen-macro", @@ -2071,7 +2057,7 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -2129,18 +2115,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 43314b7..586635b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,6 @@ crate-type = ["cdylib", "rlib"] clap = "3.0.0-beta.2" itertools = "0.10.0" serde_with = "1.6.1" -pin-utils = "0.1.0" html5ever = "0.25.1" percent-encoding = "2.1.0" url = { version = "2.2.0", features = ["serde"] } @@ -37,7 +36,6 @@ serde = { version = "1.0", features = ["derive", "rc"] } serde_json = "1.0" reqwest = { package = "reqwest-wasm", version = "0.11.0", features = ["json", "cookies", "blocking", "stream"] } futures = "0.3.12" -wee_alloc = { version = "0.4.2", optional = true } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] tokio = { version = "1.1.0", features = ["full"] } diff --git a/README.md b/README.md index 86f6407..30447e9 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ An efficient website icon scraper for rust or command line usage. ```bash cargo install site_icons -site-icons https://google.com +site-icons https://github.com # https://github.githubassets.com/favicons/favicon.svg site_favicon svg # https://github.githubassets.com/app-icon-512.png app_icon png 512x512 # https://github.githubassets.com/app-icon-192.png app_icon png 192x192 diff --git a/src/icon_info.rs b/src/icon_info.rs index 7d9e2d5..d2d5508 100644 --- a/src/icon_info.rs +++ b/src/icon_info.rs @@ -29,42 +29,8 @@ pub enum IconInfo { SVG, } -impl Display for IconInfo { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - match self { - IconInfo::PNG { size } => write!(f, "png {}", size), - IconInfo::JPEG { size } => write!(f, "jpeg {}", size), - IconInfo::ICO { sizes } => write!(f, "ico {}", sizes), - IconInfo::SVG => write!(f, "svg"), - } - } -} - -impl Ord for IconInfo { - fn cmp(&self, other: &Self) -> Ordering { - let this_size = self.size(); - let other_size = other.size(); - - if this_size.is_none() && other_size.is_none() { - Ordering::Equal - } else if let (Some(this_size), Some(other_size)) = (this_size, other_size) { - this_size.cmp(other_size) - } else if this_size.is_none() { - Ordering::Less - } else { - Ordering::Greater - } - } -} - -impl PartialOrd for IconInfo { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - impl IconInfo { - pub async fn get(url: Url, sizes: Option) -> Result> { + pub async fn load(url: Url, sizes: Option) -> Result> { let sizes = sizes.as_ref().and_then(|s| IconSizes::from_str(s).ok()); let (mime, mut body): (_, Box) = match url.scheme() { @@ -160,3 +126,37 @@ impl IconInfo { } } } + +impl Display for IconInfo { + fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { + match self { + IconInfo::PNG { size } => write!(f, "png {}", size), + IconInfo::JPEG { size } => write!(f, "jpeg {}", size), + IconInfo::ICO { sizes } => write!(f, "ico {}", sizes), + IconInfo::SVG => write!(f, "svg"), + } + } +} + +impl Ord for IconInfo { + fn cmp(&self, other: &Self) -> Ordering { + let this_size = self.size(); + let other_size = other.size(); + + if this_size.is_none() && other_size.is_none() { + Ordering::Equal + } else if let (Some(this_size), Some(other_size)) = (this_size, other_size) { + this_size.cmp(other_size) + } else if this_size.is_none() { + Ordering::Less + } else { + Ordering::Greater + } + } +} + +impl PartialOrd for IconInfo { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} diff --git a/src/icon_size/jpeg.rs b/src/icon_size/jpeg.rs index bbfb246..6c32faa 100644 --- a/src/icon_size/jpeg.rs +++ b/src/icon_size/jpeg.rs @@ -1,5 +1,4 @@ use super::IconSize; -use crate::assert_slice_eq; use byteorder::BigEndian; use futures::prelude::*; use std::{error::Error, io::Cursor}; diff --git a/src/icon_size/mod.rs b/src/icon_size/mod.rs index 6ecfa5c..257ba91 100644 --- a/src/icon_size/mod.rs +++ b/src/icon_size/mod.rs @@ -19,8 +19,8 @@ use std::{ #[serde_as] #[derive(Debug, PartialEq, Eq)] pub struct IconSize { - width: u32, - height: u32, + pub width: u32, + pub height: u32, } impl Display for IconSize { @@ -92,12 +92,3 @@ fn slice_eq( cur.read_exact(&mut buffer)?; Ok(buffer == slice) } - -#[macro_export] -macro_rules! assert_slice_eq { - ($cur:expr, $offset:expr, $slice:expr, $($arg:tt)+) => {{ - if !super::slice_eq($cur, $offset, $slice)? { - return Err(format!($($arg)+).into()); - } - }}; -} diff --git a/src/icon_size/png.rs b/src/icon_size/png.rs index a143c4c..8223b91 100644 --- a/src/icon_size/png.rs +++ b/src/icon_size/png.rs @@ -1,5 +1,4 @@ use super::IconSize; -use crate::assert_slice_eq; use byteorder::{BigEndian, ReadBytesExt}; use futures::prelude::*; use std::{error::Error, io::Cursor}; diff --git a/src/icons.rs b/src/icons.rs index 3ee1ffe..c3772ce 100644 --- a/src/icons.rs +++ b/src/icons.rs @@ -61,7 +61,7 @@ impl Icons { return; } - let mut info = Box::pin(IconInfo::get(url.clone(), sizes)); + let mut info = Box::pin(IconInfo::load(url.clone(), sizes)); // Start fetching the icon let noop_waker = noop_waker(); @@ -143,7 +143,7 @@ impl Icons { let mentions_logo = |attr_name| { elem .attr(attr_name) - .map(|attr| attr.to_lowercase().contains("logo")) + .map(|attr| regex!("logo(?!s)").is_match(&attr.to_lowercase())) .unwrap_or(false) }; if mentions_logo("class") || mentions_logo("id") { diff --git a/src/macros.rs b/src/macros.rs index 10608b9..2185249 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -25,3 +25,11 @@ macro_rules! warn_err { } }}; } + +macro_rules! assert_slice_eq { + ($cur:expr, $offset:expr, $slice:expr, $($arg:tt)+) => {{ + if !super::slice_eq($cur, $offset, $slice)? { + return Err(format!($($arg)+).into()); + } + }}; +}