diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69be977..8e6292b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,16 +35,16 @@ jobs: - name: Checkout sources uses: actions/checkout@v4 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20 + # - name: Setup Node + # uses: actions/setup-node@v4 + # with: + # node-version: 20 - - name: Install Node dependencies - run: npm ci --prefix riven/srcgen + # - name: Install Node dependencies + # run: npm ci --prefix riven/srcgen - - name: Run codegen - run: node riven/srcgen + # - name: Run codegen + # run: node riven/srcgen - name: Install Rust nightly toolchain uses: actions-rs/toolchain@v1 @@ -121,3 +121,23 @@ jobs: with: command: clippy args: --all-features --all-targets -- -D warnings + + msrv: + name: Verify MSRV + needs: pre_job + if: ${{ needs.pre_job.outputs.should_skip != 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Install Rust nightly toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + components: rustfmt + + - run: cargo install cargo-msrv --no-default-features + - run: cargo msrv verify --path riven diff --git a/riven/Cargo.toml b/riven/Cargo.toml index 3989731..a49b3b8 100644 --- a/riven/Cargo.toml +++ b/riven/Cargo.toml @@ -7,6 +7,7 @@ description = "Riot Games API Library" readme = "../README.md" license = "MIT" edition = "2018" +rust-version = "1.71.1" include = ["src/**", "../README.md", "/examples"] keywords = ["riot-games", "riot", "league", "league-of-legends"] categories = ["api-bindings", "web-programming::http-client", "wasm"] @@ -48,45 +49,45 @@ name = "proxy" required-features = ["__proxy"] [dependencies] -futures = "0.3" -log = "0.4" -memo-map = "0.3" -metrics = { version = "0.24", optional = true } -num_enum = "0.5" -parking_lot = "0.12" -reqwest = { version = "0.11", default-features = false, features = [ +futures = "0.3.0" +log = "0.4.8" +memo-map = "0.3.0" +metrics = { version = "0.24.0", optional = true } +num_enum = "0.5.0" +parking_lot = "0.12.0" +reqwest = { version = "0.11.2", default-features = false, features = [ "gzip", "json", ] } -scan_fmt = { version = "0.2", default-features = false } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -serde_repr = "0.1" -slab = "0.4" -strum = "0.20" -strum_macros = "0.20" -tracing = { version = "0.1", optional = true } +serde = { version = "1.0.85", features = ["derive"] } +serde_derive = "1.0.85" +serde_json = "1.0.1" +serde_repr = "0.1.0" +slab = "0.4.4" +strum = "0.20.0" +strum_macros = "0.20.0" +tracing = { version = "0.1.22", optional = true } [target.'cfg(not(target_family = "wasm"))'.dependencies] -tokio = { version = "1", default-features = false, features = ["time"] } +tokio = { version = "1.20.0", default-features = false, features = ["time"] } [target.'cfg(target_family = "wasm")'.dependencies] gloo-timers = { version = "0.3", features = ["futures"] } web-time = "1.0.0" [dev-dependencies] -env_logger = "0.11.0" +env_logger = ">=0.10.0,<0.12.0" fake_instant = "0.5.0" -tracing = "0.1" +tracing = "0.1.22" tracing-subscriber = "0.3.17" [target.'cfg(not(target_family = "wasm"))'.dev-dependencies] -hyper = { version = "0.14", features = ["server"] } -tokio = { version = "1", features = ["macros", "rt-multi-thread"] } -tokio-shared-rt = "0.1" +hyper = { version = "0.14.5", features = ["server"] } +tokio = { version = "1.20.0", features = ["macros", "rt-multi-thread"] } +tokio-shared-rt = "0.1.0" [target.'cfg(target_family = "wasm")'.dev-dependencies] console_error_panic_hook = "0.1" console_log = "1.0" -wasm-bindgen = "0.2" +wasm-bindgen = "0.2.70" wasm-bindgen-test = "0.3" diff --git a/riven/src/req/rate_limit.rs b/riven/src/req/rate_limit.rs index 6664dd1..3e23da3 100644 --- a/riven/src/req/rate_limit.rs +++ b/riven/src/req/rate_limit.rs @@ -3,7 +3,6 @@ use std::cmp; use futures::FutureExt; use parking_lot::{RwLock, RwLockUpgradableReadGuard}; use reqwest::{Response, StatusCode}; -use scan_fmt::scan_fmt; #[cfg(feature = "tracing")] use tracing as log; @@ -272,11 +271,19 @@ fn buckets_from_header( debug_assert!(size == count_header.split(',').count()); let mut out = Vec::with_capacity(size); + // Pair: "100:60" + fn scan_pair(entry: &str) -> Option<(usize, u64)> { + let (val_str, secs_str) = entry.split_once(':')?; + let val: usize = val_str.parse().ok()?; + let secs: u64 = secs_str.parse().ok()?; + Some((val, secs)) + } + for (limit_entry, count_entry) in limit_header.split(',').zip(count_header.split(',')) { - let (limit, limit_secs) = scan_fmt!(limit_entry, "{d}:{d}", usize, u64) - .unwrap_or_else(|_| panic!("Failed to parse limit entry \"{}\".", limit_entry)); - let (count, count_secs) = scan_fmt!(count_entry, "{d}:{d}", usize, u64) - .unwrap_or_else(|_| panic!("Failed to parse count entry \"{}\".", count_entry)); + let (limit, limit_secs) = scan_pair(limit_entry) + .unwrap_or_else(|| panic!("Failed to parse limit entry \"{}\".", limit_entry)); + let (count, count_secs) = scan_pair(count_entry) + .unwrap_or_else(|| panic!("Failed to parse count entry \"{}\".", count_entry)); debug_assert!(limit_secs == count_secs); let rate_usage_factor = if RateLimitType::Application == rate_limit_type { diff --git a/riven/src/req/token_bucket.rs b/riven/src/req/token_bucket.rs index 5c02ba8..267d1ca 100644 --- a/riven/src/req/token_bucket.rs +++ b/riven/src/req/token_bucket.rs @@ -30,13 +30,15 @@ pub trait TokenBucket { /// Get the duration of this bucket. /// # Returns /// Duration of the bucket. - #[allow(dead_code, reason = "false positive")] + #[cfg_attr(feature = "nightly", allow(dead_code, reason = "false positive"))] + #[cfg_attr(not(feature = "nightly"), allow(dead_code))] fn get_bucket_duration(&self) -> Duration; /// Get the total limit of this bucket per timespan. /// # Returns /// Total limit per timespan. - #[allow(dead_code, reason = "false positive")] + #[cfg_attr(feature = "nightly", allow(dead_code, reason = "false positive"))] + #[cfg_attr(not(feature = "nightly"), allow(dead_code))] fn get_total_limit(&self) -> usize; } diff --git a/test-min-deps.bash b/test-min-deps.bash new file mode 100644 index 0000000..ad4d2e6 --- /dev/null +++ b/test-min-deps.bash @@ -0,0 +1,8 @@ +#!/bin/bash +set -euxo pipefail + +RUSTFLAGS='-Aunexpected_cfgs' +cargo update -Z direct-minimal-versions +cargo build --all-targets + +./test.bash