-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCargo.toml
More file actions
215 lines (189 loc) · 6.78 KB
/
Copy pathCargo.toml
File metadata and controls
215 lines (189 loc) · 6.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
[workspace]
members = [
"crates/rdlp-types",
"crates/rdlp-redact",
"crates/rdlp-core",
"crates/rdlp-api",
"crates/rdlp-http",
"crates/rdlp-security",
"crates/rdlp-crypto",
"crates/rdlp-extractor",
"crates/rdlp-downloader",
"crates/rdlp-jsinterp",
"crates/rdlp-ffmpeg",
"crates/rdlp-postprocess",
"crates/rdlp-cookies",
"crates/rdlp-ratelimit",
"crates/rdlp-table",
"crates/rdlp-plugin-manifest",
"crates/rdlp-plugin",
"crates/rdlp-cli",
"crates/rdlp-desktop/src-tauri",
"crates/rdlp-probe",
]
default-members = [
"crates/rdlp-types",
"crates/rdlp-redact",
"crates/rdlp-core",
"crates/rdlp-api",
"crates/rdlp-http",
"crates/rdlp-security",
"crates/rdlp-crypto",
"crates/rdlp-extractor",
"crates/rdlp-downloader",
"crates/rdlp-jsinterp",
"crates/rdlp-ffmpeg",
"crates/rdlp-postprocess",
"crates/rdlp-cookies",
"crates/rdlp-ratelimit",
"crates/rdlp-table",
"crates/rdlp-plugin-manifest",
"crates/rdlp-plugin",
]
resolver = "2"
[workspace.package]
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
authors = ["rdlp contributors"]
license = "MIT OR Apache-2.0"
[workspace.dependencies]
rdlp-redact = { path = "crates/rdlp-redact" }
# UUID generation
uuid = { version = "1", features = ["v4"] }
# Async runtime
tokio = { version = "1.49", features = ["macros", "rt-multi-thread", "fs", "process", "io-util", "io-std", "signal"] }
tokio-util = { version = "0.7", features = ["rt"] }
async-trait = "0.1"
# HTML entity decoding (single-pass, WHATWG-complete) — shared by rdlp-extractor + rdlp-plugin
html-escape = "0.2.13"
# HTTP and networking
# wreq features:
# - cookies, json, stream: 1:1 with reqwest's feature set pre-migration
# - gzip, brotli, zstd: real browsers advertise all three; subset desyncs JA4H
# - socks: preserves --proxy SOCKS5 support
# - form: PornHub extractor needs x-www-form-urlencoded POST
#
# `prefix-symbols` (BoringSSL/OpenSSL coexistence) is enabled per-target in
# crates/rdlp-http/Cargo.toml — Linux-only, since wreq's upstream README
# explicitly documents the feature as "Linux and Android" only. On macOS it
# emits a `build_script_main_*` symbol prefix that the runtime references
# can't resolve, breaking the link.
wreq = { version = "6.0.0-rc.28", features = ["cookies", "json", "stream", "gzip", "brotli", "zstd", "socks", "form"] }
wreq-util = "3.0.0-rc.10"
# Explicit OpenSSL link — required on Linux because FFmpeg's libavformat.a
# references OpenSSL symbols that BoringSSL doesn't provide. Same per-target
# story as prefix-symbols above; declared in rdlp-http only on Linux.
openssl-sys = "0.9"
url = "2.5"
# HTML/JSON parsing
scraper = "0.25"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# `DeserializeFromStr` lets the format enums derive Deserialize from their strum
# `FromStr`, so the config file and the CLI cannot accept different vocabularies
# (#540). Already in the tree transitively via dash-mpd/sigstore/tauri-utils.
serde_with = { version = "3.18", default-features = false, features = ["macros"] }
m3u8-rs = "6.0" # HLS playlist parser
dash-mpd = { version = "0.20", default-features = false } # DASH MPD parser
# Error handling
anyhow = "1.0"
thiserror = "2.0"
# Retry logic
backon = { version = "1.6", features = ["tokio-sleep"] }
# JavaScript engine
boa_engine = "0.21"
# CLI
clap = { version = "4.6", features = ["derive", "cargo"] }
indicatif = "0.18.3"
inquire = "0.9"
# Table rendering.
# default-features = false drops the `derive` feature (the `Tabled` proc-macro),
# which is the sole path pulling in `tabled_derive` -> the archived, unmaintained
# `proc-macro-error2` crate (future-incompat E0365, rust-lang/rust#127909).
# rdlp-table builds tables at runtime via `Builder` and never uses `#[derive(Tabled)]`,
# so only the `std` feature is needed (Builder + settings::{Style,Alignment,Columns}).
# Revisit if a future tabled release drops proc-macro-error2 upstream (zhiburt/tabled#584).
tabled = { version = "0.20", default-features = false, features = ["std"] }
console = "0.16"
terminal_size = "0.4"
# Logging
log = { version = "0.4", features = ["kv"] }
env_logger = { version = "0.11", features = ["kv"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3.22", features = ["env-filter", "fmt", "tracing-log"] }
# Configuration
toml = "0.9.11"
# Plugin system
libloading = "0.8"
inventory = "0.3"
# Cookie extraction
aes = "0.8"
aes-gcm = "0.10"
base64 = "0.22"
rusqlite = { version = "0.32", features = ["bundled"] }
# Enum derives
strum = "0.27"
strum_macros = "0.27"
# Parsing
winnow = "0.7"
# Platform
dirs = "6.0"
# Utilities
regex = "1.11"
# Compile-time-validated lazy static regexes. Replaces the
# `LazyLock<Regex> + Regex::new(LITERAL).expect(...)` boilerplate in
# rdlp-extractor with `lazy_regex!(...)` so an invalid regex literal
# becomes a compile error rather than a runtime panic.
# Per https://github.com/Canop/lazy-regex#usage; uses once_cell::sync::Lazy
# under the hood and re-exports it as `Lazy`.
lazy-regex = "3"
lazy_static = "1.5"
futures = "0.3"
futures-util = "0.3"
bytes = "1.9"
hex = "0.4"
# Testing
mockito = "1.5"
temp-env = "0.3"
tempfile = "3.14"
[workspace.lints.rust]
missing_docs = "warn"
[workspace.lints.clippy]
must_use_candidate = "warn"
await_holding_lock = "deny"
await_holding_refcell_ref = "deny"
disallowed_methods = "deny"
match_same_arms = "warn"
redundant_clone = "warn"
collapsible_match = "warn"
unwrap_used = "warn"
expect_used = "warn"
missing_errors_doc = "warn"
missing_panics_doc = "warn"
wrong_self_convention = "warn"
should_implement_trait = "warn"
fn_params_excessive_bools = "warn"
# Cohesion guardrail per docs/superpowers/specs/2026-05-22-file-cohesion-policy-design.md.
# Threshold configured in clippy.toml as `too-many-lines-threshold = 150`.
# Per-function `#[allow(clippy::too_many_lines)]` permitted with a `// reason:` comment
# naming the structural justification (long match arm, state machine, FFI dispatch).
too_many_lines = "warn"
# ── Dev profile: prioritize compile speed ──────────────────────────────
[profile.dev]
# Line-tables-only: enough for backtraces, much less data than full debug info
debug = "line-tables-only"
# Split debug info into separate files for faster incremental linking
split-debuginfo = "unpacked"
# Optimize third-party deps even in dev — they rarely change, so the
# one-time cost pays back via faster runtime and smaller link inputs.
# Workspace members inherit [profile.dev] (opt-level 0) and are NOT
# affected by this wildcard override.
[profile.dev.package."*"]
opt-level = 1
debug = false
# ── Release profile: maximize runtime performance ───────────────────────
[profile.release]
lto = "thin"
codegen-units = 1
strip = true