Author SHA1 Message Date
darkstack ca0ac561ad Rust LS
Build App / Build (push) Failing after 3m13s
2025-03-30 22:52:03 +02:00
darkstack 00a524a20e AArch64 Build
Build App / Build (push) Failing after 22s
2025-03-30 22:42:04 +02:00
darkstack 5c52a1fbfe Build
Build App / Build (push) Failing after 2m53s
2025-03-30 22:16:55 +02:00
darkstack 690a31bb6f Non movable callback 2025-03-28 17:08:51 +01:00
darkstack c580b0a249 Departure and 2 pass draw 2025-03-27 23:55:28 +01:00
darkstack 893aaf6c6f Init 2025-03-24 01:13:30 +01:00
14 changed files with 1567 additions and 1197 deletions
+9 -12
View File
@@ -8,15 +8,13 @@ jobs:
steps:
- name: Update
run: |
cat /etc/apt/sources.list
# TODO : Add from previous file
sudo apt-get update -y -qq || true
sudo apt-get install -y build-essential git make zip libsdl2-dev libsdl2-2.0-0 libsdl2-net-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-gfx-dev libsdl2-ttf-dev gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
#ARM64
sudo apt-get install -y build-essential git make zip libsdl2-dev libsdl2-2.0-0 libsdl2-net-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-gfx-dev libsdl2-ttf-dev gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu libssl-dev
#sudo apt install -y libssl-dev:arm64 libasound2-dev:arm64
sudo sh -c "echo '192.168.1.253 descartes.local' >> /etc/hosts"
sudo sh -c "echo '192.168.1.253 build.ladose.net' >> /etc/hosts"
sudo curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
sudo -E $HOME/.cargo/bin/rustup target add aarch64-unknown-linux-gnu
- name: GetDNS
run: |
@@ -30,20 +28,18 @@ jobs:
run: |
. "$HOME/.cargo/env"
cargo build --release
cargo build --release --target=aarch64-unknown-linux-gnu
- name: Zip file
run: |
zip -r build.zip config.toml ./assets/*
zip -j build.zip ./target/release/ladose-caller
zip -rj build.zip ./target/release/
zip -rj build-Aarch64.zip ./target/release/
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
path: build.zip
name: build.zip
path: build-linux64.zip
name: build-linux64.zip
retention-days: 30
overwrite: true
- name: Get current date
id: date
run: echo "date=$(echo $(date +'%Y-%m-%d'))" >> $GITHUB_OUTPUT
- name: Release
if: github.ref_name == 'master'
uses: akkuman/gitea-release-action@v1
@@ -51,5 +47,6 @@ jobs:
with:
tag_name: release-${{ steps.date.outputs.date }}
files: |-
build.zip
build-winx64.zip
build-linux64.zip
Generated
+1505 -477
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -4,8 +4,9 @@ version = "0.1.0"
edition = "2024"
[dependencies]
cynic = { version = "3", features = ["http-reqwest"] }
reqwest = { version = "0.12.15", features = ["json","blocking", "rustls-tls"], default-features = false }
cynic = { version = "3", features = ["http-surf"] }
surf = { version = "2", features = ["h1-client-rustls"]}
async-std = "1.10"
toml = "0.8.20"
serde = "1.0.219"
[build-dependencies]
@@ -16,5 +17,4 @@ cynic-codegen = { version = "3" }
[dependencies.sdl2]
version = "0.37"
default-features = false
features = ["ttf","image","gfx"]
features = ["ttf","image","gfx","mixer"]
-14
View File
@@ -1,14 +0,0 @@
FROM rust:latest
RUN dpkg --add-architecture arm64
RUN apt update && apt upgrade -y
RUN apt install -y g++-aarch64-linux-gnu libc6-dev-arm64-cross
RUN apt-get install -y libsdl2-dev:arm64 libsdl2-2.0-0:arm64 libsdl2-net-dev:arm64 libsdl2-mixer-dev:arm64 libsdl2-image-dev:arm64 libsdl2-gfx-dev:arm64 libsdl2-ttf-dev:arm64
RUN rustup target add aarch64-unknown-linux-gnu
RUN rustup toolchain add stable-aarch64-unknown-linux-gnu --force-non-host
WORKDIR /app
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
CMD ["cargo", "build", "--target", "aarch64-unknown-linux-gnu","-r"]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

-12
View File
@@ -1,12 +0,0 @@
#!/bin/sh
echo "build podman image"
podman build . -t cross_compile/rust_aarch64
echo "run build"
podman run --rm -v .:/app cross_compile/rust_aarch64
ssh tom@raspberrypi.local -f 'sudo systemctl stop lightdm'
ssh tom@raspberrypi.local -f 'killall ladose-caller'
scp ./target/aarch64-unknown-linux-gnu/release/ladose-caller tom@raspberrypi.local:
ssh tom@raspberrypi.local -f 'sudo systemctl start lightdm'
+2 -7
View File
@@ -1,12 +1,7 @@
tournament = 'tournoi-kiouze-test'
update = 2
update = 20
fullscreen = false
tournament_image = './assets/images/xsb_white.png'
font = './assets/fonts/achemine_regular.ttf'
font_departure = './assets/fonts/achemine_bold.ttf'
font_size = 40
font_size_departure = 60
smash_key = 'Bearer API_KEY'
smash_key = 'Bearer c4b3c20f0be75100d7ce375eb8effc1a'
margin = 10
w = 800
h = 600
+30 -31
View File
@@ -19,13 +19,9 @@ use serde::Deserialize;
#[derive(Deserialize,Clone)]
pub struct Config {
tournament: String,
w : u32,
h : u32,
update: Option<u32>,
fullscreen: Option<bool>,
smash_key: String,
font: String,
font_departure: String,
font_size: u16,
font_size_departure : u16,
margin: u32,
@@ -44,7 +40,7 @@ struct Line<'a> {
impl Config {
fn new() -> Self {
Self { tournament: String::new(), update: Some(1),fullscreen:Some(false), smash_key: String::new(), font_size: 30 , font_size_departure : 45, margin: 10,tournament_image: None , w : 1920, h: 1080, font: String::from("./assets/fonts/achemine_regular.ttf"), font_departure: String::from("./assets/fonts/achemine_bold.ttf"),}
Self { tournament: String::new(), update: Some(1),fullscreen:Some(false), smash_key: String::new(), font_size: 30 , font_size_departure : 45, margin: 10,tournament_image: None }
}
}
@@ -65,25 +61,15 @@ pub fn render(canvas : &mut Canvas<sdl2::video::Window> , queues : &Vec<smashreq
let mut y : u32 = 0;
let mut index = 0;
let mut lines = Vec::<Line>::new();
//Departure !
let d_surface = font_departure.render("Départ / Departure").blended(Color::RGBA(130, 218, 255, 255)).map_err(|e| e.to_string()).unwrap();
let d_text = texture_creator.create_texture_from_surface(&d_surface).unwrap();
let d_textq : TextureQuery = d_text.query();
let angle : f64 = f64::from(-90.0);
let d_x = canvas.viewport().width() as i32 - d_textq.height as i32 - 10 ;
let d_y = canvas.viewport().height() as i32 -10 ;
let dst = Rect::new(d_x, d_y,d_textq.width,d_textq.height);
//Parse the Queue
for sq in queues {
let surface: sdl2::surface::Surface<'_> = font.render(sq.name.as_str()).blended(Color::RGBA(255, 255, 0, 255)).map_err(|e| e.to_string()).unwrap();
let text = texture_creator.create_texture_from_surface(&surface).unwrap();
let textq : TextureQuery = text.query();
let _ = canvas.copy(&text, None, Rect::new(0, y.try_into().map_err(|_| 0).unwrap(), textq.width, textq.height));
y += textq.height + config.margin;
y += textq.height+config.margin * 2;
//compute line
for current_match in &sq.matches {
@@ -101,29 +87,39 @@ pub fn render(canvas : &mut Canvas<sdl2::video::Window> , queues : &Vec<smashreq
players : var_name,
texture : texture_creator.create_texture_from_surface(&surface).unwrap(),
alt_color : switch_col,
y: y
y: 0
};
y += line.height + (config.margin*2);
lines.push(line);
}
}
let prev_y = y;
// background
for l in &lines {
if l.alt_color {
let _ = canvas.copy(&backline_text, None, Rect::new(0, l.y as i32 , canvas.viewport().width(), l.height + config.margin ));
let _ = canvas.copy(&backline_text, None, Rect::new(0, y as i32 - config.margin as i32 , canvas.viewport().width(), l.height + config.margin ));
}
y += l.height + (config.margin*2);
}
// depart !
let d_surface = font_departure.render("Départ / Departure").blended(Color::RGBA(130, 218, 255, 255)).map_err(|e| e.to_string()).unwrap();
let d_text = texture_creator.create_texture_from_surface(&d_surface).unwrap();
let d_textq : TextureQuery = d_text.query();
let angle : f64 = f64::from(-90.0);
let d_x = canvas.viewport().width() as i32 - (d_textq.width as i32/2) - d_textq.height as i32;
let d_y = canvas.viewport().height() as i32 - ( d_textq.width as i32 /2) - d_textq.height as i32;
let dst = Rect::new(d_x, d_y,d_textq.width,d_textq.height);
let _ = canvas.copy_ex(&d_text, None, dst,angle,None,false,false).unwrap();// d_textq.width, d_textq.height));
let _ = canvas.copy_ex(&d_text, None, dst,angle,sdl2::rect::Point::new(0,0),false,false).unwrap();// d_textq.width, d_textq.height));
// foreground
y = prev_y;
for l in &lines {
let _ = canvas.copy(&l.texture, None, Rect::new(10, l.y as i32 + (config.margin/2) as i32 , l.width, l.height));
let _ = canvas.copy(&l.texture, None, Rect::new(10, y as i32 - config.margin as i32/2 , l.width, l.height));
y += l.height + (config.margin *2) ;
}
}
}
@@ -136,7 +132,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let box_config : Box<Config> = if config_file.is_ok() {
Box::new(toml::from_str(&config_file.unwrap()).unwrap())
} else {
panic!("Error No config file!")
Box::new(Config::new())
};
let update_timer = match box_config.update {
Some(v) => v,
@@ -163,7 +159,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let mut build = video_subsystem.window("LaDOSE-SNCF", box_config.w, box_config.h);
let mut build = video_subsystem.window("LaDOSE-SNCF", 1280, 720);
if fullscreen {
build.fullscreen();
}
@@ -176,10 +172,13 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut canvas: Canvas<sdl2::video::Window> = window.into_canvas().build().unwrap();
let ttf_context = sdl2::ttf::init().unwrap();
let font : sdl2::ttf::Font<'_, '_> = ttf_context.load_font(&box_config.font, box_config.font_size).unwrap();
let font_departure : sdl2::ttf::Font<'_, '_> = ttf_context.load_font(&box_config.font_departure, box_config.font_size_departure).unwrap();
let font : sdl2::ttf::Font<'_, '_> = ttf_context.load_font("font/achemine_bold.ttf", box_config.font_size).unwrap();
let font_departure : sdl2::ttf::Font<'_, '_> = ttf_context.load_font("font/achemine_bold.ttf", box_config.font_size_departure).unwrap();
let timer = sdl_context.timer()?;
let test_clone = Arc::clone(&test);
let callback = Box::new(|| {
println!("Smash!");
let data = smashrequest::get_matches(box_config.tournament.as_str(), box_config.smash_key.as_str());
@@ -218,6 +217,6 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
}
canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
}
}
+7 -18
View File
@@ -1,6 +1,6 @@
use crate::smashquery::{MyQuery, MyQueryVariables, Set, SetSlot,StreamQueue};
use cynic::{ GraphQlResponse, QueryBuilder};
//use futures::executor;
use cynic::{http::SurfExt, GraphQlResponse, QueryBuilder};
static URL_SMASH: &str = "https://api.start.gg/gql/alpha";
#[derive(Debug,Clone)]
@@ -30,31 +30,20 @@ impl SmashQueue{
Self { name:String::from(""),matches : vec![] }
}
}
fn build_query(tournament :&str) -> cynic::Operation<MyQuery,MyQueryVariables> {
MyQuery::build(MyQueryVariables
{
slug:Some(tournament)
} )
}
fn request_stream_queue(tournament :&str, key : &str ) -> GraphQlResponse<MyQuery>{
// let resp = async_std::task::block_on(async {
let resp = async_std::task::block_on(async {
let query = MyQuery::build(MyQueryVariables
{
slug:Some(tournament)
} );
let resp = surf::post(URL_SMASH).header("Authorization", key).run_graphql(query).await.unwrap();
return resp;
});
let resp = reqwest::blocking::Client::new().post(URL_SMASH).header("Authorization", key).json(&query).send().unwrap();
return resp.json().unwrap();
// });
// return resp;
return resp;
}
-612
View File
@@ -1,612 +0,0 @@
ladose-caller v0.1.0 (/ssd/src/ladose-caller)
├── cynic v3.10.0
│ ├── cynic-proc-macros v3.10.0 (proc-macro)
│ │ ├── cynic-codegen v3.10.0
│ │ │ ├── cynic-parser v0.9.1
│ │ │ │ ├── indexmap v2.8.0
│ │ │ │ │ ├── equivalent v1.0.2
│ │ │ │ │ └── hashbrown v0.15.2
│ │ │ │ ├── lalrpop-util v0.22.1
│ │ │ │ │ └── rustversion v1.0.20 (proc-macro)
│ │ │ │ └── logos v0.14.4
│ │ │ │ └── logos-derive v0.14.4 (proc-macro)
│ │ │ │ └── logos-codegen v0.14.4
│ │ │ │ ├── beef v0.5.2
│ │ │ │ ├── fnv v1.0.7
│ │ │ │ ├── lazy_static v1.5.0
│ │ │ │ ├── proc-macro2 v1.0.94
│ │ │ │ │ └── unicode-ident v1.0.18
│ │ │ │ ├── quote v1.0.40
│ │ │ │ │ └── proc-macro2 v1.0.94 (*)
│ │ │ │ ├── regex-syntax v0.8.5
│ │ │ │ └── syn v2.0.100
│ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ └── unicode-ident v1.0.18
│ │ │ ├── darling v0.20.10
│ │ │ │ ├── darling_core v0.20.10
│ │ │ │ │ ├── fnv v1.0.7
│ │ │ │ │ ├── ident_case v1.0.1
│ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ ├── strsim v0.11.1
│ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ └── darling_macro v0.20.10 (proc-macro)
│ │ │ │ ├── darling_core v0.20.10 (*)
│ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ └── syn v2.0.100 (*)
│ │ │ ├── once_cell v1.21.1
│ │ │ ├── ouroboros v0.18.5
│ │ │ │ ├── aliasable v0.1.3
│ │ │ │ ├── ouroboros_macro v0.18.5 (proc-macro)
│ │ │ │ │ ├── heck v0.4.1
│ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ ├── proc-macro2-diagnostics v0.10.1
│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ ├── syn v2.0.100 (*)
│ │ │ │ │ │ └── yansi v1.0.1
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ └── static_assertions v1.1.0
│ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ ├── quote v1.0.40 (*)
│ │ │ ├── strsim v0.10.0
│ │ │ ├── syn v2.0.100 (*)
│ │ │ └── thiserror v1.0.69
│ │ │ └── thiserror-impl v1.0.69 (proc-macro)
│ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ ├── quote v1.0.40 (*)
│ │ │ └── syn v2.0.100 (*)
│ │ ├── darling v0.20.10 (*)
│ │ ├── quote v1.0.40 (*)
│ │ └── syn v2.0.100 (*)
│ ├── ref-cast v1.0.24
│ │ └── ref-cast-impl v1.0.24 (proc-macro)
│ │ ├── proc-macro2 v1.0.94 (*)
│ │ ├── quote v1.0.40 (*)
│ │ └── syn v2.0.100 (*)
│ ├── serde v1.0.219
│ │ └── serde_derive v1.0.219 (proc-macro)
│ │ ├── proc-macro2 v1.0.94 (*)
│ │ ├── quote v1.0.40 (*)
│ │ └── syn v2.0.100 (*)
│ ├── serde_json v1.0.140
│ │ ├── itoa v1.0.15
│ │ ├── memchr v2.7.4
│ │ ├── ryu v1.0.20
│ │ └── serde v1.0.219 (*)
│ ├── static_assertions v1.1.0
│ ├── surf v2.3.2
│ │ ├── async-std v1.13.1
│ │ │ ├── async-channel v1.9.0
│ │ │ │ ├── concurrent-queue v2.5.0
│ │ │ │ │ └── crossbeam-utils v0.8.21
│ │ │ │ ├── event-listener v2.5.3
│ │ │ │ └── futures-core v0.3.31
│ │ │ ├── async-global-executor v2.4.1
│ │ │ │ ├── async-channel v2.3.1
│ │ │ │ │ ├── concurrent-queue v2.5.0 (*)
│ │ │ │ │ ├── event-listener-strategy v0.5.3
│ │ │ │ │ │ ├── event-listener v5.4.0
│ │ │ │ │ │ │ ├── concurrent-queue v2.5.0 (*)
│ │ │ │ │ │ │ ├── parking v2.2.1
│ │ │ │ │ │ │ └── pin-project-lite v0.2.16
│ │ │ │ │ │ └── pin-project-lite v0.2.16
│ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ └── pin-project-lite v0.2.16
│ │ │ │ ├── async-executor v1.13.1
│ │ │ │ │ ├── async-task v4.7.1
│ │ │ │ │ ├── concurrent-queue v2.5.0 (*)
│ │ │ │ │ ├── fastrand v2.3.0
│ │ │ │ │ ├── futures-lite v2.6.0
│ │ │ │ │ │ ├── fastrand v2.3.0
│ │ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ │ ├── futures-io v0.3.31
│ │ │ │ │ │ ├── parking v2.2.1
│ │ │ │ │ │ └── pin-project-lite v0.2.16
│ │ │ │ │ └── slab v0.4.9
│ │ │ │ │ [build-dependencies]
│ │ │ │ │ └── autocfg v1.4.0
│ │ │ │ ├── async-io v2.4.0
│ │ │ │ │ ├── async-lock v3.4.0
│ │ │ │ │ │ ├── event-listener v5.4.0 (*)
│ │ │ │ │ │ ├── event-listener-strategy v0.5.3 (*)
│ │ │ │ │ │ └── pin-project-lite v0.2.16
│ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ ├── concurrent-queue v2.5.0 (*)
│ │ │ │ │ ├── futures-io v0.3.31
│ │ │ │ │ ├── futures-lite v2.6.0 (*)
│ │ │ │ │ ├── parking v2.2.1
│ │ │ │ │ ├── polling v3.7.4
│ │ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ │ ├── rustix v0.38.44
│ │ │ │ │ │ │ ├── bitflags v2.9.0
│ │ │ │ │ │ │ └── linux-raw-sys v0.4.15
│ │ │ │ │ │ └── tracing v0.1.41
│ │ │ │ │ │ ├── log v0.4.26
│ │ │ │ │ │ │ └── value-bag v1.10.0
│ │ │ │ │ │ ├── pin-project-lite v0.2.16
│ │ │ │ │ │ ├── tracing-attributes v0.1.28 (proc-macro)
│ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ │ │ └── tracing-core v0.1.33
│ │ │ │ │ │ └── once_cell v1.21.1
│ │ │ │ │ ├── rustix v0.38.44 (*)
│ │ │ │ │ ├── slab v0.4.9 (*)
│ │ │ │ │ └── tracing v0.1.41 (*)
│ │ │ │ ├── async-lock v3.4.0 (*)
│ │ │ │ ├── blocking v1.6.1
│ │ │ │ │ ├── async-channel v2.3.1 (*)
│ │ │ │ │ ├── async-task v4.7.1
│ │ │ │ │ ├── futures-io v0.3.31
│ │ │ │ │ ├── futures-lite v2.6.0 (*)
│ │ │ │ │ └── piper v0.2.4
│ │ │ │ │ ├── atomic-waker v1.1.2
│ │ │ │ │ ├── fastrand v2.3.0
│ │ │ │ │ └── futures-io v0.3.31
│ │ │ │ ├── futures-lite v2.6.0 (*)
│ │ │ │ └── once_cell v1.21.1
│ │ │ ├── async-io v2.4.0 (*)
│ │ │ ├── async-lock v3.4.0 (*)
│ │ │ ├── crossbeam-utils v0.8.21
│ │ │ ├── futures-core v0.3.31
│ │ │ ├── futures-io v0.3.31
│ │ │ ├── futures-lite v2.6.0 (*)
│ │ │ ├── kv-log-macro v1.0.7
│ │ │ │ └── log v0.4.26 (*)
│ │ │ ├── log v0.4.26 (*)
│ │ │ ├── memchr v2.7.4
│ │ │ ├── once_cell v1.21.1
│ │ │ ├── pin-project-lite v0.2.16
│ │ │ ├── pin-utils v0.1.0
│ │ │ └── slab v0.4.9 (*)
│ │ ├── async-trait v0.1.88 (proc-macro)
│ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ ├── quote v1.0.40 (*)
│ │ │ └── syn v2.0.100 (*)
│ │ ├── cfg-if v1.0.0
│ │ ├── encoding_rs v0.8.35
│ │ │ └── cfg-if v1.0.0
│ │ ├── futures-util v0.3.31
│ │ │ ├── futures-channel v0.3.31
│ │ │ │ ├── futures-core v0.3.31
│ │ │ │ └── futures-sink v0.3.31
│ │ │ ├── futures-core v0.3.31
│ │ │ ├── futures-io v0.3.31
│ │ │ ├── futures-macro v0.3.31 (proc-macro)
│ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ └── syn v2.0.100 (*)
│ │ │ ├── futures-sink v0.3.31
│ │ │ ├── futures-task v0.3.31
│ │ │ ├── memchr v2.7.4
│ │ │ ├── pin-project-lite v0.2.16
│ │ │ ├── pin-utils v0.1.0
│ │ │ └── slab v0.4.9 (*)
│ │ ├── getrandom v0.2.15
│ │ │ ├── cfg-if v1.0.0
│ │ │ └── libc v0.2.171
│ │ ├── http-client v6.5.3
│ │ │ ├── async-h1 v2.3.4
│ │ │ │ ├── async-channel v1.9.0 (*)
│ │ │ │ ├── async-dup v1.2.4
│ │ │ │ │ ├── async-lock v3.4.0 (*)
│ │ │ │ │ └── futures-io v0.3.31
│ │ │ │ ├── async-global-executor v2.4.1 (*)
│ │ │ │ ├── async-io v1.13.0
│ │ │ │ │ ├── async-lock v2.8.0
│ │ │ │ │ │ └── event-listener v2.5.3
│ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ ├── concurrent-queue v2.5.0 (*)
│ │ │ │ │ ├── futures-lite v1.13.0
│ │ │ │ │ │ ├── fastrand v1.9.0
│ │ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ │ ├── futures-io v0.3.31
│ │ │ │ │ │ ├── memchr v2.7.4
│ │ │ │ │ │ ├── parking v2.2.1
│ │ │ │ │ │ ├── pin-project-lite v0.2.16
│ │ │ │ │ │ └── waker-fn v1.2.0
│ │ │ │ │ ├── log v0.4.26 (*)
│ │ │ │ │ ├── parking v2.2.1
│ │ │ │ │ ├── polling v2.8.0
│ │ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ └── log v0.4.26 (*)
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── autocfg v1.4.0
│ │ │ │ │ ├── rustix v0.37.28
│ │ │ │ │ │ ├── bitflags v1.3.2
│ │ │ │ │ │ ├── io-lifetimes v1.0.11
│ │ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ │ └── linux-raw-sys v0.3.8
│ │ │ │ │ ├── slab v0.4.9 (*)
│ │ │ │ │ ├── socket2 v0.4.10
│ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ └── waker-fn v1.2.0
│ │ │ │ │ [build-dependencies]
│ │ │ │ │ └── autocfg v1.4.0
│ │ │ │ ├── futures-lite v1.13.0 (*)
│ │ │ │ ├── http-types v2.12.0
│ │ │ │ │ ├── anyhow v1.0.97
│ │ │ │ │ ├── async-channel v1.9.0 (*)
│ │ │ │ │ ├── async-std v1.13.1 (*)
│ │ │ │ │ ├── base64 v0.13.1
│ │ │ │ │ ├── cookie v0.14.4
│ │ │ │ │ │ ├── aes-gcm v0.8.0
│ │ │ │ │ │ │ ├── aead v0.3.2
│ │ │ │ │ │ │ │ └── generic-array v0.14.7
│ │ │ │ │ │ │ │ └── typenum v1.18.0
│ │ │ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ │ │ ├── aes v0.6.0
│ │ │ │ │ │ │ │ ├── aes-soft v0.6.4
│ │ │ │ │ │ │ │ │ ├── cipher v0.2.5
│ │ │ │ │ │ │ │ │ │ └── generic-array v0.14.7 (*)
│ │ │ │ │ │ │ │ │ └── opaque-debug v0.3.1
│ │ │ │ │ │ │ │ └── cipher v0.2.5 (*)
│ │ │ │ │ │ │ ├── cipher v0.2.5 (*)
│ │ │ │ │ │ │ ├── ctr v0.6.0
│ │ │ │ │ │ │ │ └── cipher v0.2.5 (*)
│ │ │ │ │ │ │ ├── ghash v0.3.1
│ │ │ │ │ │ │ │ ├── opaque-debug v0.3.1
│ │ │ │ │ │ │ │ └── polyval v0.4.5
│ │ │ │ │ │ │ │ ├── cpuid-bool v0.2.0
│ │ │ │ │ │ │ │ ├── opaque-debug v0.3.1
│ │ │ │ │ │ │ │ └── universal-hash v0.4.1
│ │ │ │ │ │ │ │ ├── generic-array v0.14.7 (*)
│ │ │ │ │ │ │ │ └── subtle v2.4.1
│ │ │ │ │ │ │ └── subtle v2.4.1
│ │ │ │ │ │ ├── base64 v0.13.1
│ │ │ │ │ │ ├── hkdf v0.10.0
│ │ │ │ │ │ │ ├── digest v0.9.0
│ │ │ │ │ │ │ │ └── generic-array v0.14.7 (*)
│ │ │ │ │ │ │ └── hmac v0.10.1
│ │ │ │ │ │ │ ├── crypto-mac v0.10.1
│ │ │ │ │ │ │ │ ├── generic-array v0.14.7 (*)
│ │ │ │ │ │ │ │ └── subtle v2.4.1
│ │ │ │ │ │ │ └── digest v0.9.0 (*)
│ │ │ │ │ │ ├── hmac v0.10.1 (*)
│ │ │ │ │ │ ├── percent-encoding v2.3.1
│ │ │ │ │ │ ├── rand v0.8.5
│ │ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ │ ├── rand_chacha v0.3.1
│ │ │ │ │ │ │ │ ├── ppv-lite86 v0.2.21
│ │ │ │ │ │ │ │ │ └── zerocopy v0.8.24
│ │ │ │ │ │ │ │ └── rand_core v0.6.4
│ │ │ │ │ │ │ │ └── getrandom v0.2.15 (*)
│ │ │ │ │ │ │ └── rand_core v0.6.4 (*)
│ │ │ │ │ │ ├── sha2 v0.9.9
│ │ │ │ │ │ │ ├── block-buffer v0.9.0
│ │ │ │ │ │ │ │ └── generic-array v0.14.7 (*)
│ │ │ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ │ │ ├── cpufeatures v0.2.17
│ │ │ │ │ │ │ ├── digest v0.9.0 (*)
│ │ │ │ │ │ │ └── opaque-debug v0.3.1
│ │ │ │ │ │ └── time v0.2.27
│ │ │ │ │ │ ├── const_fn v0.4.11 (proc-macro)
│ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ ├── standback v0.2.17
│ │ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ │ └── time-macros v0.1.1
│ │ │ │ │ │ ├── proc-macro-hack v0.5.20+deprecated (proc-macro)
│ │ │ │ │ │ └── time-macros-impl v0.1.2 (proc-macro)
│ │ │ │ │ │ ├── proc-macro-hack v0.5.20+deprecated (proc-macro)
│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ ├── standback v0.2.17
│ │ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ │ └── syn v1.0.109
│ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ └── unicode-ident v1.0.18
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ ├── futures-lite v1.13.0 (*)
│ │ │ │ │ ├── infer v0.2.3
│ │ │ │ │ ├── pin-project-lite v0.2.16
│ │ │ │ │ ├── rand v0.7.3
│ │ │ │ │ │ ├── getrandom v0.1.16
│ │ │ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ ├── rand_chacha v0.2.2
│ │ │ │ │ │ │ ├── ppv-lite86 v0.2.21 (*)
│ │ │ │ │ │ │ └── rand_core v0.5.1
│ │ │ │ │ │ │ └── getrandom v0.1.16 (*)
│ │ │ │ │ │ └── rand_core v0.5.1 (*)
│ │ │ │ │ ├── serde v1.0.219 (*)
│ │ │ │ │ ├── serde_json v1.0.140 (*)
│ │ │ │ │ ├── serde_qs v0.8.5
│ │ │ │ │ │ ├── percent-encoding v2.3.1
│ │ │ │ │ │ ├── serde v1.0.219 (*)
│ │ │ │ │ │ └── thiserror v1.0.69 (*)
│ │ │ │ │ ├── serde_urlencoded v0.7.1
│ │ │ │ │ │ ├── form_urlencoded v1.2.1
│ │ │ │ │ │ │ └── percent-encoding v2.3.1
│ │ │ │ │ │ ├── itoa v1.0.15
│ │ │ │ │ │ ├── ryu v1.0.20
│ │ │ │ │ │ └── serde v1.0.219 (*)
│ │ │ │ │ └── url v2.5.4
│ │ │ │ │ ├── form_urlencoded v1.2.1 (*)
│ │ │ │ │ ├── idna v1.0.3
│ │ │ │ │ │ ├── idna_adapter v1.2.0
│ │ │ │ │ │ │ ├── icu_normalizer v1.5.0
│ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro)
│ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ ├── icu_collections v1.5.0
│ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ ├── yoke v0.7.5
│ │ │ │ │ │ │ │ │ │ ├── stable_deref_trait v1.2.0
│ │ │ │ │ │ │ │ │ │ ├── yoke-derive v0.7.5 (proc-macro)
│ │ │ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ │ │ │ └── synstructure v0.13.1
│ │ │ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ │ │ └── zerofrom v0.1.6
│ │ │ │ │ │ │ │ │ │ └── zerofrom-derive v0.1.6 (proc-macro)
│ │ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ │ ├── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ │ │ └── synstructure v0.13.1 (*)
│ │ │ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*)
│ │ │ │ │ │ │ │ │ └── zerovec v0.10.4
│ │ │ │ │ │ │ │ │ ├── yoke v0.7.5 (*)
│ │ │ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*)
│ │ │ │ │ │ │ │ │ └── zerovec-derive v0.10.3 (proc-macro)
│ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ ├── icu_normalizer_data v1.5.0
│ │ │ │ │ │ │ │ ├── icu_properties v1.5.1
│ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ ├── icu_collections v1.5.0 (*)
│ │ │ │ │ │ │ │ │ ├── icu_locid_transform v1.5.0
│ │ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ │ ├── icu_locid v1.5.0
│ │ │ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ │ │ ├── litemap v0.7.5
│ │ │ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6
│ │ │ │ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── writeable v0.5.5
│ │ │ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ │ │ │ ├── icu_locid_transform_data v1.5.0
│ │ │ │ │ │ │ │ │ │ ├── icu_provider v1.5.0
│ │ │ │ │ │ │ │ │ │ │ ├── displaydoc v0.2.5 (proc-macro) (*)
│ │ │ │ │ │ │ │ │ │ │ ├── icu_locid v1.5.0 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── icu_provider_macros v1.5.0 (proc-macro)
│ │ │ │ │ │ │ │ │ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ │ │ │ │ │ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ │ │ │ │ │ │ │ │ └── syn v2.0.100 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── stable_deref_trait v1.2.0
│ │ │ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── writeable v0.5.5
│ │ │ │ │ │ │ │ │ │ │ ├── yoke v0.7.5 (*)
│ │ │ │ │ │ │ │ │ │ │ ├── zerofrom v0.1.6 (*)
│ │ │ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6 (*)
│ │ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ │ │ ├── icu_properties_data v1.5.0
│ │ │ │ │ │ │ │ │ ├── icu_provider v1.5.0 (*)
│ │ │ │ │ │ │ │ │ ├── tinystr v0.7.6 (*)
│ │ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ │ ├── icu_provider v1.5.0 (*)
│ │ │ │ │ │ │ │ ├── smallvec v1.14.0
│ │ │ │ │ │ │ │ ├── utf16_iter v1.0.5
│ │ │ │ │ │ │ │ ├── utf8_iter v1.0.4
│ │ │ │ │ │ │ │ ├── write16 v1.0.0
│ │ │ │ │ │ │ │ └── zerovec v0.10.4 (*)
│ │ │ │ │ │ │ └── icu_properties v1.5.1 (*)
│ │ │ │ │ │ ├── smallvec v1.14.0
│ │ │ │ │ │ └── utf8_iter v1.0.4
│ │ │ │ │ ├── percent-encoding v2.3.1
│ │ │ │ │ └── serde v1.0.219 (*)
│ │ │ │ ├── httparse v1.10.1
│ │ │ │ ├── log v0.4.26 (*)
│ │ │ │ └── pin-project v1.1.10
│ │ │ │ └── pin-project-internal v1.1.10 (proc-macro)
│ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ └── syn v2.0.100 (*)
│ │ │ ├── async-std v1.13.1 (*)
│ │ │ ├── async-tls v0.10.0
│ │ │ │ ├── futures-core v0.3.31
│ │ │ │ ├── futures-io v0.3.31
│ │ │ │ ├── rustls v0.18.1
│ │ │ │ │ ├── base64 v0.12.3
│ │ │ │ │ ├── log v0.4.26 (*)
│ │ │ │ │ ├── ring v0.16.20
│ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ ├── once_cell v1.21.1
│ │ │ │ │ │ ├── spin v0.5.2
│ │ │ │ │ │ └── untrusted v0.7.1
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── cc v1.2.17
│ │ │ │ │ │ └── shlex v1.3.0
│ │ │ │ │ ├── sct v0.6.1
│ │ │ │ │ │ ├── ring v0.16.20 (*)
│ │ │ │ │ │ └── untrusted v0.7.1
│ │ │ │ │ └── webpki v0.21.4
│ │ │ │ │ ├── ring v0.16.20 (*)
│ │ │ │ │ └── untrusted v0.7.1
│ │ │ │ ├── webpki v0.21.4 (*)
│ │ │ │ └── webpki-roots v0.20.0
│ │ │ │ └── webpki v0.21.4 (*)
│ │ │ ├── async-trait v0.1.88 (proc-macro) (*)
│ │ │ ├── cfg-if v1.0.0
│ │ │ ├── dashmap v5.5.3
│ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ ├── hashbrown v0.14.5
│ │ │ │ ├── lock_api v0.4.12
│ │ │ │ │ └── scopeguard v1.2.0
│ │ │ │ │ [build-dependencies]
│ │ │ │ │ └── autocfg v1.4.0
│ │ │ │ ├── once_cell v1.21.1
│ │ │ │ └── parking_lot_core v0.9.10
│ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ ├── libc v0.2.171
│ │ │ │ └── smallvec v1.14.0
│ │ │ ├── deadpool v0.7.0
│ │ │ │ ├── async-trait v0.1.88 (proc-macro) (*)
│ │ │ │ ├── config v0.10.1
│ │ │ │ │ ├── lazy_static v1.5.0
│ │ │ │ │ ├── nom v5.1.3
│ │ │ │ │ │ ├── lexical-core v0.7.6
│ │ │ │ │ │ │ ├── arrayvec v0.5.2
│ │ │ │ │ │ │ ├── bitflags v1.3.2
│ │ │ │ │ │ │ ├── cfg-if v1.0.0
│ │ │ │ │ │ │ ├── ryu v1.0.20
│ │ │ │ │ │ │ └── static_assertions v1.1.0
│ │ │ │ │ │ └── memchr v2.7.4
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ └── version_check v0.9.5
│ │ │ │ │ └── serde v1.0.219 (*)
│ │ │ │ ├── crossbeam-queue v0.3.12
│ │ │ │ │ └── crossbeam-utils v0.8.21
│ │ │ │ ├── num_cpus v1.16.0
│ │ │ │ │ └── libc v0.2.171
│ │ │ │ ├── serde v1.0.219 (*)
│ │ │ │ └── tokio v1.44.1
│ │ │ │ └── pin-project-lite v0.2.16
│ │ │ ├── futures v0.3.31
│ │ │ │ ├── futures-channel v0.3.31 (*)
│ │ │ │ ├── futures-core v0.3.31
│ │ │ │ ├── futures-executor v0.3.31
│ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ ├── futures-task v0.3.31
│ │ │ │ │ └── futures-util v0.3.31 (*)
│ │ │ │ ├── futures-io v0.3.31
│ │ │ │ ├── futures-sink v0.3.31
│ │ │ │ ├── futures-task v0.3.31
│ │ │ │ └── futures-util v0.3.31 (*)
│ │ │ ├── http-types v2.12.0 (*)
│ │ │ ├── isahc v0.9.14
│ │ │ │ ├── bytes v0.5.6
│ │ │ │ ├── crossbeam-utils v0.8.21
│ │ │ │ ├── curl v0.4.47
│ │ │ │ │ ├── curl-sys v0.4.80+curl-8.12.1
│ │ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ │ ├── libnghttp2-sys v0.1.11+1.64.0
│ │ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ │ └── cc v1.2.17 (*)
│ │ │ │ │ │ ├── libz-sys v1.1.22
│ │ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ │ ├── cc v1.2.17 (*)
│ │ │ │ │ │ │ ├── pkg-config v0.3.32
│ │ │ │ │ │ │ └── vcpkg v0.2.15
│ │ │ │ │ │ └── openssl-sys v0.9.106
│ │ │ │ │ │ └── libc v0.2.171
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ ├── cc v1.2.17 (*)
│ │ │ │ │ │ ├── pkg-config v0.3.32
│ │ │ │ │ │ └── vcpkg v0.2.15
│ │ │ │ │ │ [build-dependencies]
│ │ │ │ │ │ ├── cc v1.2.17 (*)
│ │ │ │ │ │ └── pkg-config v0.3.32
│ │ │ │ │ ├── libc v0.2.171
│ │ │ │ │ ├── openssl-probe v0.1.6
│ │ │ │ │ ├── openssl-sys v0.9.106 (*)
│ │ │ │ │ └── socket2 v0.5.8
│ │ │ │ │ └── libc v0.2.171
│ │ │ │ ├── curl-sys v0.4.80+curl-8.12.1 (*)
│ │ │ │ ├── flume v0.9.2
│ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ ├── futures-sink v0.3.31
│ │ │ │ │ └── spinning_top v0.2.5
│ │ │ │ │ └── lock_api v0.4.12 (*)
│ │ │ │ ├── futures-lite v1.13.0 (*)
│ │ │ │ ├── http v0.2.12
│ │ │ │ │ ├── bytes v1.10.1
│ │ │ │ │ ├── fnv v1.0.7
│ │ │ │ │ └── itoa v1.0.15
│ │ │ │ ├── log v0.4.26 (*)
│ │ │ │ ├── once_cell v1.21.1
│ │ │ │ ├── slab v0.4.9 (*)
│ │ │ │ ├── sluice v0.5.5
│ │ │ │ │ ├── async-channel v1.9.0 (*)
│ │ │ │ │ ├── futures-core v0.3.31
│ │ │ │ │ └── futures-io v0.3.31
│ │ │ │ ├── tracing v0.1.41 (*)
│ │ │ │ ├── tracing-futures v0.2.5
│ │ │ │ │ ├── pin-project v1.1.10 (*)
│ │ │ │ │ └── tracing v0.1.41 (*)
│ │ │ │ ├── url v2.5.4 (*)
│ │ │ │ └── waker-fn v1.2.0
│ │ │ ├── log v0.4.26 (*)
│ │ │ └── rustls v0.18.1 (*)
│ │ ├── http-types v2.12.0 (*)
│ │ ├── log v0.4.26 (*)
│ │ ├── mime_guess v2.0.5
│ │ │ ├── mime v0.3.17
│ │ │ └── unicase v2.8.1
│ │ │ [build-dependencies]
│ │ │ └── unicase v2.8.1
│ │ ├── once_cell v1.21.1
│ │ ├── pin-project-lite v0.2.16
│ │ ├── rustls v0.18.1 (*)
│ │ ├── serde v1.0.219 (*)
│ │ ├── serde_json v1.0.140 (*)
│ │ └── web-sys v0.3.77
│ │ ├── js-sys v0.3.77
│ │ │ ├── once_cell v1.21.1
│ │ │ └── wasm-bindgen v0.2.100
│ │ │ ├── cfg-if v1.0.0
│ │ │ ├── once_cell v1.21.1
│ │ │ └── wasm-bindgen-macro v0.2.100 (proc-macro)
│ │ │ ├── quote v1.0.40 (*)
│ │ │ └── wasm-bindgen-macro-support v0.2.100
│ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ ├── quote v1.0.40 (*)
│ │ │ ├── syn v2.0.100 (*)
│ │ │ ├── wasm-bindgen-backend v0.2.100
│ │ │ │ ├── bumpalo v3.17.0
│ │ │ │ ├── log v0.4.26
│ │ │ │ ├── proc-macro2 v1.0.94 (*)
│ │ │ │ ├── quote v1.0.40 (*)
│ │ │ │ ├── syn v2.0.100 (*)
│ │ │ │ └── wasm-bindgen-shared v0.2.100
│ │ │ │ └── unicode-ident v1.0.18
│ │ │ └── wasm-bindgen-shared v0.2.100 (*)
│ │ └── wasm-bindgen v0.2.100 (*)
│ └── thiserror v1.0.69 (*)
├── sdl2 v0.37.0
│ ├── bitflags v1.3.2
│ ├── c_vec v2.0.0
│ ├── lazy_static v1.5.0
│ ├── libc v0.2.171
│ └── sdl2-sys v0.37.0
│ └── libc v0.2.171
│ [build-dependencies]
│ ├── cfg-if v1.0.0
│ └── version-compare v0.1.1
├── serde v1.0.219 (*)
├── surf v2.3.2 (*)
└── toml v0.8.20
├── serde v1.0.219 (*)
├── serde_spanned v0.6.8
│ └── serde v1.0.219 (*)
├── toml_datetime v0.6.8
│ └── serde v1.0.219 (*)
└── toml_edit v0.22.24
├── indexmap v2.8.0 (*)
├── serde v1.0.219 (*)
├── serde_spanned v0.6.8 (*)
├── toml_datetime v0.6.8 (*)
└── winnow v0.7.4
[build-dependencies]
└── cynic-codegen v3.10.0 (*)