diff --git a/README.md b/README.md index 821b628..182b03d 100644 --- a/README.md +++ b/README.md @@ -529,7 +529,7 @@ See also [A comparison of operating systems written in Rust](https://github.com/ ### Web Servers -* [emanuele-em/man-in-the-middle-proxy](https://github.com/emanuele-em/man-in-the-middle-proxy) β€” A MITM Proxy πŸ¦€! Toolkit for HTTP/1, HTTP/2, and WebSockets with SSL/TLS Capabilities [![Rust](https://github.com/emanuele-em/man-in-the-middle-proxy/actions/workflows/rust.yml/badge.svg)](https://github.com/emanuele-em/man-in-the-middle-proxy/actions/workflows/rust.yml) +* [emanuele-em/proxelar](https://github.com/emanuele-em/proxelar) β€” A MITM Proxy πŸ¦€! Toolkit for HTTP/1, HTTP/2, and WebSockets with SSL/TLS Capabilities [![Rust](https://github.com/emanuele-em/proxelar/actions/workflows/rust.yml/badge.svg)](https://github.com/emanuele-em/proxelar/actions/workflows/rust.yml) * [mu-arch/skyfolder](https://github.com/mu-arch/skyfolder) - πŸͺ‚ Beautiful HTTP/Bittorrent server without the hassle. Secure - GUI - Pretty - Fast * [mufeedvh/binserve](https://github.com/mufeedvh/binserve) β€” A blazingly fast static web server with routing, templating, and security in a single binary you can set up with zero code [![build badge](https://github.com/mufeedvh/binserve/workflows/CICD/badge.svg?branch=master)](https://github.com/mufeedvh/binserve/actions) * [orhun/rustypaste](https://github.com/orhun/rustypaste) β€” A minimal file upload/pastebin service ![https://github.com/orhun/rustypaste/actions](https://img.shields.io/github/actions/workflow/status/orhun/rustypaste/ci.yml?branch=master&label=build) @@ -553,7 +553,7 @@ See also [A comparison of operating systems written in Rust](https://github.com/ * [dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) β€” Linter for `.env` files [![build badge](https://github.com/dotenv-linter/dotenv-linter/workflows/CI/badge.svg?branch=master)](https://github.com/dotenv-linter/dotenv-linter/actions?query=workflow%3ACI+branch%3Amaster) * [frolic](https://github.com/FrolicOrg/Frolic) β€” An API layer to build customer facing dashboards 10x faster * [fw](https://github.com/brocode/fw) β€” workspace productivity booster [![Rust](https://github.com/brocode/fw/actions/workflows/rust.yml/badge.svg)](https://github.com/brocode/fw/actions/workflows/rust.yml) -* [geiger](https://github.com/rust-secure-code/cargo-geiger) β€” A program that list statistics related to usage of unsafe Rust code in a Rust crate and all its dependencies [![Build Status](https://dev.azure.com/cargo-geiger/cargo-geiger/_apis/build/status/rust-secure-code.cargo-geiger?branchName=master)](https://dev.azure.com/cargo-geiger/cargo-geiger/_build/latest?definitionId=1&branchName=master) +* [geiger](https://github.com/geiger-rs/cargo-geiger) β€” A program that list statistics related to usage of unsafe Rust code in a Rust crate and all its dependencies [![Build Status](https://dev.azure.com/cargo-geiger/cargo-geiger/_apis/build/status/geiger-rs.cargo-geiger?branchName=master)](https://dev.azure.com/cargo-geiger/cargo-geiger/_build/latest?definitionId=1&branchName=master) * [git-cliff](https://github.com/orhun/git-cliff) β€” A highly customizable Changelog Generator that follows Conventional Commit specifications ![https://github.com/orhun/git-cliff/actions](https://img.shields.io/github/actions/workflow/status/orhun/git-cliff/ci.yml?branch=main&label=build) * [git-journal](https://github.com/saschagrunert/git-journal/) β€” The Git Commit Message and Changelog Generation Framework * [hot-lib-reloader](https://github.com/rksm/hot-lib-reloader-rs) β€” Hot reload Rust code [![build badge](https://github.com/rksm/hot-lib-reloader-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/rksm/hot-lib-reloader-rs/actions/workflows/ci.yml) @@ -689,7 +689,7 @@ See also [Foreign Function Interface](https://doc.rust-lang.org/book/first-editi * [PyO3/PyO3](https://github.com/PyO3/PyO3) β€” Rust bindings for the Python interpreter * [RustPython](https://github.com/RustPython/RustPython) β€” A Python Interpreter written in Rust [![Build Status](https://github.com/RustPython/RustPython/workflows/CI/badge.svg)](https://github.com/RustPython/RustPython/actions?query=workflow%3ACI) * Ruby - * [d-unseductable/ruru](https://github.com/d-unseductable/ruru) β€” native Ruby extensions written in Rust + * [d-unsed/ruru](https://github.com/d-unsed/ruru) β€” native Ruby extensions written in Rust * [danielpclark/rutie](https://github.com/danielpclark/rutie) β€” native Ruby extensions written in Rust and vice versa * Web Assembly * [rhysd/wain](https://github.com/rhysd/wain) - wain: WebAssembly INterpreter from scratch in Safe Rust with zero dependency [![build badge](https://github.com/rhysd/wain/workflows/CI/badge.svg?branch=master&event=push)](https://github.com/rhysd/wain/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush) @@ -825,7 +825,7 @@ See [[Machine learning](https://crates.io/keywords/machine-learning)] See also [About Rust’s Machine Learning Community](https://medium.com/@autumn_eng/about-rust-s-machine-learning-community-4cda5ec8a790#.hvkp56j3f) and [Are we learning yet?](https://www.arewelearningyet.com). * [autumnai/leaf](https://github.com/autumnai/leaf) β€” Open Machine Intelligence framework.. Abandoned project. The most updated fork is [spearow/juice]( https://github.com/spearow/juice). -* [burn-rs/burn](https://github.com/burn-rs/burn) - A Flexible and Comprehensive Deep Learning Framework in Rust. +* [burn](https://github.com/tracel-ai/burn) - A Flexible and Comprehensive Deep Learning Framework in Rust. * [coreylowman/dfdx](https://github.com/coreylowman/dfdx) β€” CUDA accelearted machine learning framework that leverages many of Rust's unique features. ![Crates.io](https://img.shields.io/crates/v/dfdx) * [huggingface/candle](https://github.com/huggingface/candle) [[candle-core](https://crates.io/crates/candle-core)]- a minimalist ML framework with a focus on easiness of use and on performance (including GPU support) * [huggingface/tokenizers](https://github.com/huggingface/tokenizers) - Hugging Face's tokenizers for modern NLP pipelines written in Rust (original implementation) with bindings for Python. [![Build Status](https://github.com/huggingface/tokenizers/workflows/Rust/badge.svg?branch=master)](https://github.com/huggingface/tokenizers/actions) @@ -1050,6 +1050,7 @@ See also [About Rust’s Machine Learning Community](https://medium.com/@autumn_ * [debris/tiny-keccak](https://github.com/debris/tiny-keccak) β€” Pure Rust implementation of the Keccak family (SHA3) * [exonum/exonum](https://github.com/exonum/exonum) [[exonum](https://crates.io/crates/exonum)] β€” extensible framework for blockchain projects * [facebook/opaque-ke](https://github.com/facebook/opaque-ke) β€” Pure Rust implementation of the recent [OPAQUE](https://datatracker.ietf.org/doc/draft-krawczyk-cfrg-opaque/) password-authenticated key exchange. [![build badge](https://github.com/facebook/opaque-ke/workflows/Rust%20CI/badge.svg?branch=master)](https://github.com/facebook/opaque-ke) +* [iddm/randomorg](https://github.com/iddm/randomorg) - A random.org client library. [![Crates badge](https://img.shields.io/crates/v/randomorg.svg)](https://crates.io/crates/randomorg) * [klutzy/suruga](https://github.com/klutzy/suruga) β€” A Rust implementation of [TLS 1.2](https://datatracker.ietf.org/doc/html/rfc5246) * [kornelski/rust-security-framework](https://github.com/kornelski/rust-security-framework) β€” Bindings for Security Framework (OSX native) * [libOctavo/octavo](https://github.com/libOctavo/octavo) β€” Modular hash and crypto library in Rust @@ -1060,7 +1061,6 @@ See also [About Rust’s Machine Learning Community](https://medium.com/@autumn_ * [sfackler/rust-native-tls](https://github.com/sfackler/rust-native-tls) β€” Bindings for native TLS libraries * [sfackler/rust-openssl](https://github.com/sfackler/rust-openssl) β€” [OpenSSL](https://www.openssl.org/) bindings * [sorairolake/scryptenc-rs](https://github.com/sorairolake/scryptenc-rs) [[scryptenc](https://crates.io/crates/scryptenc)] β€” An implementation of the scrypt encrypted data format. [![CI](https://github.com/sorairolake/scryptenc-rs/workflows/CI/badge.svg?branch=develop)](https://github.com/sorairolake/scryptenc-rs/actions?query=workflow%3ACI) -* [vityafx/randomorg](https://github.com/vityafx/randomorg) - A random.org client library. [![Crates badge](https://img.shields.io/crates/v/randomorg.svg)](https://crates.io/crates/randomorg) * [w3f/schnorrkel](https://github.com/w3f/schnorrkel) - Schnorr VRFs and signatures on the Ristretto group ### Data processing @@ -1261,7 +1261,7 @@ See also [About Rust’s Machine Learning Community](https://medium.com/@autumn_ * CSV * [BurntSushi/rust-csv](https://github.com/BurntSushi/rust-csv) β€” A fast and flexible CSV reader and writer, with support for Serde * EDN - * [naomijub/edn-rs](https://github.com/naomijub/edn-rs) [[edn-rs](https://crates.io/crates/edn-rs)] β€” crate to parse and emit EDN format into Rust types. + * [edn-rs](https://github.com/edn-rs/edn-rs) [[edn-rs](https://crates.io/crates/edn-rs)] β€” crate to parse and emit EDN format into Rust types. * [FlatBuffers](https://flatbuffers.dev/) * [frol/flatc-rust](https://github.com/frol/flatc-rust) β€” FlatBuffers compiler (flatc) integration for Cargo build scripts * HAR @@ -1288,7 +1288,7 @@ See also [About Rust’s Machine Learning Community](https://medium.com/@autumn_ * RON (Rusty Object Notation) * [https://github.com/ron-rs/ron](https://github.com/ron-rs/ron) β€” * Serde - * [vityafx/serde-aux](https://github.com/vityafx/serde-aux/) - additional tools for using with the serde library. [![CI](https://github.com/vityafx/serde-aux/actions/workflows/ci.yml/badge.svg)](https://github.com/vityafx/serde-aux/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/serde-aux.svg)](https://crates.io/crates/serde-aux) + * [iddm/serde-aux](https://github.com/iddm/serde-aux/) - additional tools for using with the serde library. [![CI](https://github.com/iddm/serde-aux/actions/workflows/ci.yml/badge.svg)](https://github.com/iddm/serde-aux/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/serde-aux.svg)](https://crates.io/crates/serde-aux) * TOML * [tamasfe/taplo](https://github.com/tamasfe/taplo) [[taplo](https://crates.io/crates/taplo)] β€” A TOML toolkit written in Rust [![CI](https://github.com/tamasfe/taplo/workflows/Continuous%20integration/badge.svg)](https://github.com/tamasfe/taplo/actions?query=workflow%3A%22Continuous+integration%22) * [toml-rs/toml](https://github.com/toml-rs/toml) β€” [![CI](https://github.com/toml-rs/toml/actions/workflows/ci.yml/badge.svg)](https://github.com/toml-rs/toml/actions/workflows/ci.yml) @@ -1341,7 +1341,7 @@ See also [Are we game yet?](https://arewegameyet.rs) * bracket-lib (previously RLTK) * [bracket-lib](https://github.com/amethyst/bracket-lib) [[bracket-lib](https://crates.io/crates/bracket-lib)] - The Roguelike Toolkit (RLTK), implemented for Rust. [![Rust](https://github.com/amethyst/bracket-lib/actions/workflows/rust.yml/badge.svg)](https://github.com/amethyst/bracket-lib/actions/workflows/rust.yml) * Challonge - * [vityafx/challonge-rs](https://github.com/vityafx/challonge-rs) [[challonge](https://crates.io/crates/challonge)] β€” Client library for the Challonge REST API. Helps to organize tournaments. [![CI](https://github.com/vityafx/challonge-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/vityafx/challonge-rs/actions/workflows/ci.yml) + * [iddm/challonge-rs](https://github.com/iddm/challonge-rs) [[challonge](https://crates.io/crates/challonge)] β€” Client library for the Challonge REST API. Helps to organize tournaments. [![CI](https://github.com/iddm/challonge-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/iddm/challonge-rs/actions/workflows/ci.yml) * Corange * [lucidscape/corange-rs](https://github.com/lucidscape/corange-rs) β€” [Corange](https://github.com/orangeduck/Corange) bindings * Entity-Component Systems (ECS) @@ -1371,7 +1371,7 @@ See also [Are we game yet?](https://arewegameyet.rs) * [tomassedovic/tcod-rs](https://github.com/tomassedovic/tcod-rs) β€” Libtcod bindings for Rust. * Warning: Not maintained anymore * Toornament-rs - * [vityafx/toornament-rs](https://github.com/vityafx/toornament-rs) - Toornament.com API bindings for Rust. [![CI](https://github.com/vityafx/toornament-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/vityafx/toornament-rs/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/toornament.svg)](https://crates.io/crates/toornament) + * [iddm/toornament-rs](https://github.com/iddm/toornament-rs) - Toornament.com API bindings for Rust. [![CI](https://github.com/iddm/toornament-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/iddm/toornament-rs/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/toornament.svg)](https://crates.io/crates/toornament) * Victorem * [VictoremWinbringer/Victorem](https://github.com/VictoremWinbringer/Victorem) [[Victorem](https://crates.io/crates/Victorem)] β€” Easy UDP Game Server and UDP Client framework for creating simple 2D and 3D online game prototype @@ -1593,8 +1593,8 @@ See also [Are we game yet?](https://arewegameyet.rs) ### Platform specific * Cross-platform + * [iddm/thread-priority](https://github.com/iddm/thread-priority/) - Simple, crossplatform thread priority management. [![CI](https://github.com/iddm/thread-priority/actions/workflows/ci.yml/badge.svg)](https://github.com/iddm/thread-priority/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/thread-priority.svg)](https://crates.io/crates/thread-priority) * [svartalf/rust-battery](https://crates.io/crates/battery) β€” Cross-platform information about the notebook batteries - * [vityafx/thread-priority](https://github.com/vityafx/thread-priority/) - Simple, crossplatform thread priority management. [![CI](https://github.com/vityafx/thread-priority/actions/workflows/ci.yml/badge.svg)](https://github.com/vityafx/thread-priority/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/thread-priority.svg)](https://crates.io/crates/thread-priority) * FreeBSD * [fubarnetes/libjail-rs](https://github.com/fubarnetes/libjail-rs/) [[jail](https://crates.io/crates/jail)] β€” Rust implementation of a FreeBSD jail library * Linux @@ -1636,7 +1636,7 @@ See also [Are we game yet?](https://arewegameyet.rs) * [ardaku/whoami](https://github.com/ardaku/whoami) [[whoami](https://crates.io/crates/whoami)] β€” Rust crate to get the current user and environment. [![build badge](https://github.com/ardaku/whoami/actions/workflows/ci.yml/badge.svg?branch=stable)](https://github.com/ardaku/whoami/actions/workflows/ci.yml) * [GuillaumeGomez/sysinfo](https://github.com/GuillaumeGomez/sysinfo) [[sysinfo](https://crates.io/crates/sysinfo)] β€” Cross-platform library to fetch system information [![build badge](https://github.com/GuillaumeGomez/sysinfo/actions/workflows/CI.yml/badge.svg?branch=master)](https://github.com/GuillaumeGomez/sysinfo/actions/workflows/CI.yml) * [Phate6660/nixinfo](https://github.com/Phate6660/nixinfo) [[nixinfo](https://crates.io/crates/nixinfo)] β€” A lib crate for gathering system info such as cpu, distro, environment, kernel, etc. -* [sorairolake/sysexits-rs](https://github.com/sorairolake/sysexits-rs) [[sysexits](https://crates.io/crates/sysexits)] β€” The system exit codes as defined by [``](https://man.openbsd.org/sysexits). [![CI](https://github.com/sorairolake/sysexits-rs/workflows/CI/badge.svg?branch=develop)](https://github.com/sorairolake/sysexits-rs/actions?query=workflow%3ACI) +* [sorairolake/sysexits-rs](https://github.com/sorairolake/sysexits-rs) [[sysexits](https://crates.io/crates/sysexits)] β€” The system exit codes as defined by [``](https://manpages.ubuntu.com/manpages/lunar/man3/sysexits.h.3head.html). [![CI](https://github.com/sorairolake/sysexits-rs/workflows/CI/badge.svg?branch=develop)](https://github.com/sorairolake/sysexits-rs/actions?query=workflow%3ACI) ### Task scheduling @@ -1737,7 +1737,7 @@ See also [Are we web yet?](https://www.arewewebyet.org) and [Rust web framework * [Nickel](https://github.com/nickel-org/nickel.rs/) β€” inspired by [Express](http://expressjs.com/) * [Ogeon/rustful](https://github.com/Ogeon/rustful) β€” A RESTful web framework for Rust * [poem-web/poem](https://github.com/poem-web/poem) - A full-featured and easy-to-use web framework with the Rust programming language. [![CI](https://github.com/poem-web/poem/actions/workflows/ci.yml/badge.svg)](https://github.com/poem-web/poem/actions/workflows/ci.yml) - * [Rocket](https://github.com/SergioBenitez/Rocket) β€” Rocket is web framework for Rust (nightly) with a focus on ease-of-use, expressability, and speed + * [Rocket](https://github.com/rwf2/Rocket) β€” Rocket is a web framework for Rust with a focus on ease-of-use, expressability, and speed * [Rustless](https://github.com/rustless/rustless) β€” A REST-like API micro-framework inspired by [Grape](https://github.com/ruby-grape/grape) and [Hyper](https://github.com/hyperium/hyper) * [Salvo](https://github.com/salvo-rs/salvo) β€” an easy to use webframework base on hyper and tokio. [![build build](https://github.com/salvo-rs/salvo/workflows/CI%20(Linux)/badge.svg?branch=master&event=push)](https://github.com/salvo-rs/salvo/actions) * [Saphir](https://github.com/richerarc/saphir) β€” A progressive web framework with low-level control, without the pain. @@ -1769,10 +1769,10 @@ See also [Are we web yet?](https://www.arewewebyet.org) and [Rust web framework * [leven-the-blog/leven](https://github.com/leven-the-blog/leven) [[leven](https://crates.io/crates/leven)] β€” A simple, parallelized blog generator. * [WebSocket](https://datatracker.ietf.org/doc/rfc6455/) * [housleyjk/ws-rs](https://github.com/housleyjk/ws-rs) β€” lightweight, event-driven WebSockets for Rust + * [iddm/urlshortener-rs](https://github.com/iddm/urlshortener-rs) β€” A very simple urlshortener library for Rust. [![CI](https://github.com/iddm/urlshortener-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/iddm/urlshortener-rs/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/urlshortener.svg)](https://crates.io/crates/urlshortener) * [rust-websocket](https://github.com/websockets-rs/rust-websocket) β€” A framework for dealing with WebSocket connections (both clients and servers) * [snapview/tungstenite-rs](https://github.com/snapview/tungstenite-rs) β€” Lightweight stream-based WebSocket implementation for Rust. * [vi/websocat](https://github.com/vi/websocat) β€” CLI for interacting with WebSockets, with functionality of Netcat, Curl and Socat. - * [vityafx/urlshortener-rs](https://github.com/vityafx/urlshortener-rs) β€” A very simple urlshortener library for Rust. [![CI](https://github.com/vityafx/urlshortener-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/vityafx/urlshortener-rs/actions/workflows/ci.yml) [![Crates badge](https://img.shields.io/crates/v/urlshortener.svg)](https://crates.io/crates/urlshortener) ## Registries @@ -1790,7 +1790,7 @@ A registry allows you to publish your Rust libraries as crate packages, to share * [Learning systems programming with Rust](https://speakerdeck.com/jvns/learning-systems-programming-with-rust) β€” Presented by [Julia Evans](https://twitter.com/@b0rk) @ Rustconf 2016. * [Rust: Hack Without Fear!](https://www.youtube.com/watch?v=lO1z-7cuRYI) β€” Presented by [Nicholas Matsakis](https://github.com/nikomatsakis) @ C++Now 2018 * [Shipping a Solid Rust Crate](https://www.youtube.com/watch?v=t4CyEKb-ywA) β€” Presented by [Michael Gattozzi](https://github.com/mgattozzi) @ RustConf 2017 -* [Discover Rust Libraries & Code Snippets](https://kandi.openweaver.com/explore/rust) - A curated list of Rust libraries, authors, kits, tutorials & learning resources on kandi +* [Discover Rust Libraries & Code Snippets](https://kandi.openweaver.com/explorelibrary/rust) - A curated list of Rust libraries, authors, kits, tutorials & learning resources on kandi * Learning * [Aquascope](https://github.com/cognitive-engineering-lab/aquascope) - Interactive visualizations of Rust at compile-time and run-time * [Awesome Rust Streaming](https://github.com/jamesmunns/awesome-rust-streaming) - A community curated list of livestreams about Rust. diff --git a/src/main.rs b/src/main.rs index c02ffa9..30ea26f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,6 +38,10 @@ fn override_stars(level: u32, text: &str) -> Option { } lazy_static! { + // We don't explicitly check these, because they just bug out in Github. We're _hoping_ they don't go away! + static ref ASSUME_WORKS: Vec = vec![ + "https://www.reddit.com/r/rust/".to_string() + ]; // Overrides for popularity count, each needs a good reason (i.e. downloads/stars we don't support automatic counting of) // Each is a URL that's "enough" for an item to pass the popularity checks static ref POPULARITY_OVERRIDES: Vec = vec![ @@ -247,15 +251,19 @@ async fn get_downloads(github_url: &str) -> Option { fn get_url_core(url: String) -> BoxFuture<'static, (String, Result<(), CheckerError>)> { async move { - let mut res = Err(CheckerError::NotTried); + if ASSUME_WORKS.contains(&url) { + info!("We assume {} just works...", url); + return (url, Ok(())); + } + if env::var("USERNAME_FOR_GITHUB").is_ok() && env::var("TOKEN_FOR_GITHUB").is_ok() && GITHUB_REPO_REGEX.is_match(&url) { + let rewritten = GITHUB_REPO_REGEX.replace_all(&url, "https://api.github.com/repos/$org/$repo"); + info!("Replacing {} with {} to workaround rate limits on Github", url, rewritten); + let (_new_url, res) = get_url_core(rewritten.to_string()).await; + return (url, res); + } + let mut res: Result<(), CheckerError> = Err(CheckerError::NotTried); for _ in 0..5u8 { debug!("Running {}", url); - if env::var("USERNAME_FOR_GITHUB").is_ok() && env::var("TOKEN_FOR_GITHUB").is_ok() && GITHUB_REPO_REGEX.is_match(&url) { - let rewritten = GITHUB_REPO_REGEX.replace_all(&url, "https://api.github.com/repos/$org/$repo"); - info!("Replacing {} with {} to workaround rate limits on Github", url, rewritten); - let (_new_url, res) = get_url_core(rewritten.to_string()).await; - return (url, res); - } let mut req = CLIENT .get(&url) .header(header::ACCEPT, "image/svg+xml, text/html, */*;q=0.8");