mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
11 KiB
TOML
392 lines
11 KiB
TOML
[workspace]
|
|
members = [
|
|
# SyncTV crates
|
|
"synctv-proto",
|
|
"synctv-proto-build",
|
|
"synctv-proto-main",
|
|
"synctv-proto-providers",
|
|
"synctv-proto-playback-provider",
|
|
"synctv-core",
|
|
"synctv-core/testing",
|
|
"synctv-adapter",
|
|
"synctv-proxy",
|
|
"synctv-api",
|
|
"synctv-api-common",
|
|
"synctv-api-http",
|
|
"synctv-api-grpc",
|
|
"synctv-livestream",
|
|
"synctv-cluster",
|
|
"synctv-realtime",
|
|
"synctv-media-providers",
|
|
"synctv-management",
|
|
"synctv",
|
|
# Shared utilities
|
|
"synctv-common",
|
|
# xiu consolidated crate
|
|
"synctv-xiu",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "1.0.2-rc.2"
|
|
edition = "2021"
|
|
authors = ["SyncTV Contributors"]
|
|
license = "MIT"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "deny"
|
|
|
|
[workspace.lints.clippy]
|
|
pedantic = { level = "deny", priority = -1 }
|
|
style = { level = "deny", priority = -1 }
|
|
complexity = { level = "deny", priority = -1 }
|
|
perf = { level = "deny", priority = -1 }
|
|
cargo = { level = "deny", priority = -1 }
|
|
todo = "deny"
|
|
unwrap_used = "deny"
|
|
doc_markdown = "allow"
|
|
struct_excessive_bools = "allow"
|
|
case_sensitive_file_extension_comparisons = "allow"
|
|
missing_fields_in_debug = "allow"
|
|
trivially_copy_pass_by_ref = "allow"
|
|
default_trait_access = "allow"
|
|
match_wildcard_for_single_variants = "allow"
|
|
explicit_deref_methods = "allow"
|
|
double_must_use = "allow"
|
|
field_reassign_with_default = "allow"
|
|
float_cmp = "allow"
|
|
large_enum_variant = "allow"
|
|
struct_field_names = "allow"
|
|
too_many_lines = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
must_use_candidate = "allow"
|
|
wildcard_imports = "allow"
|
|
redundant_pub_crate = "allow"
|
|
similar_names = "allow"
|
|
multiple_crate_versions = "allow"
|
|
cargo_common_metadata = "allow"
|
|
redundant_feature_names = "allow"
|
|
needless_for_each = "allow"
|
|
unnecessary_wraps = "allow"
|
|
|
|
[workspace.dependencies]
|
|
# Async Runtime
|
|
tokio = { version = "=1.53.0", features = [
|
|
"rt-multi-thread",
|
|
"macros",
|
|
"net",
|
|
"io-util",
|
|
"process",
|
|
"time",
|
|
"sync",
|
|
"signal",
|
|
"fs",
|
|
] }
|
|
tokio-util = { version = "=0.7.18", features = ["codec", "io", "io-util", "rt"] }
|
|
tokio-stream = "=0.1.18"
|
|
|
|
# gRPC & Protobuf
|
|
tonic = { version = "=0.14.6", default-features = false, features = [
|
|
"transport",
|
|
"codegen",
|
|
"server",
|
|
"router",
|
|
"channel",
|
|
"gzip",
|
|
] }
|
|
tonic-web = "=0.14.6"
|
|
tonic-reflection = "=0.14.6"
|
|
tonic-health = "=0.14.6"
|
|
tonic-types = "=0.14.6"
|
|
tonic-build = "=0.14.6"
|
|
tonic-prost = "=0.14.6"
|
|
tonic-prost-build = "=0.14.6"
|
|
protoc-bin-vendored = "=3.2.0"
|
|
prost = "=0.14.4"
|
|
prost-types = "=0.14.4"
|
|
prost-reflect = "=0.16.5"
|
|
prost-reflect-build = "=0.16.1"
|
|
prost-protovalidate = "=0.6.0"
|
|
pbjson = "=0.9.0"
|
|
pbjson-build = "=0.9.0"
|
|
pbjson-types = "=0.9.0"
|
|
|
|
# HTTP Framework
|
|
axum = { version = "=0.8.9", features = ["macros", "ws"] }
|
|
tower = { version = "=0.5.3", features = [
|
|
"util",
|
|
"timeout",
|
|
"limit",
|
|
"load-shed",
|
|
] }
|
|
tower-http = { version = "=0.7.0", features = [
|
|
"trace",
|
|
"on-early-drop",
|
|
"cors",
|
|
] }
|
|
hyper = { version = "=1.10.1", default-features = false, features = [
|
|
"http1",
|
|
"http2",
|
|
"server",
|
|
"client",
|
|
] }
|
|
reqwest = { version = "=0.13.4", default-features = false, features = [
|
|
"json",
|
|
"cookies",
|
|
"query",
|
|
"form",
|
|
] }
|
|
|
|
# Database
|
|
sqlx = { version = "=0.9.0", default-features = false, features = [
|
|
"runtime-tokio",
|
|
"postgres",
|
|
"migrate",
|
|
"uuid",
|
|
"chrono",
|
|
"json",
|
|
"macros",
|
|
] }
|
|
|
|
# Redis
|
|
redis = { version = "=1.4.1", default-features = false, features = [
|
|
"tokio-comp",
|
|
"connection-manager",
|
|
"streams",
|
|
"sentinel",
|
|
"script",
|
|
] }
|
|
|
|
# Security
|
|
opaque-ke = { version = "=4.1.0-pre.2", features = ["argon2"] }
|
|
jsonwebtoken = { version = "=10.4.0", features = ["rust_crypto"] }
|
|
oauth2 = { version = "=5.0.0", default-features = false }
|
|
webauthn-rs = { version = "=0.6.1-dev", features = ["conditional-ui", "danger-allow-state-serialisation"] }
|
|
webauthn-rs-proto = "=0.6.1-dev"
|
|
aes-gcm = "=0.11.0"
|
|
aes = "=0.9.1"
|
|
cbc = { version = "=0.2.1", features = ["alloc", "block-padding"] }
|
|
ammonia = "=4.1.4"
|
|
http-acl = "=0.11.0"
|
|
http-acl-reqwest = "=0.11.0"
|
|
hkdf = "=0.12.4"
|
|
sha1 = "=0.11.0"
|
|
sha2 = "=0.11.0"
|
|
sm3 = "=0.5.0"
|
|
md-5 = "=0.11.0"
|
|
hmac = "=0.13.0"
|
|
rsa = "=0.9.10"
|
|
subtle = "=2.6.1"
|
|
|
|
# Serialization
|
|
serde = { version = "=1.0.228", features = ["derive"] }
|
|
serde_json = "=1.0.150"
|
|
quick-xml = "=0.41.0"
|
|
serde_yaml = "=0.9.34"
|
|
serde_ignored = "=0.1.14"
|
|
toml = "=1.1.2"
|
|
serde_urlencoded = "=0.7.1"
|
|
serde_html_form = "=0.4.1"
|
|
serde_path_to_error = "=0.1.20"
|
|
indexmap = "=2.14.0"
|
|
bincode = { version = "=2.0.1", features = ["serde"] }
|
|
|
|
# Caching
|
|
moka = { version = "=0.12.15", features = ["future", "sync"] }
|
|
dashmap = "=7.0.0-rc2"
|
|
lru = "=0.18.1"
|
|
|
|
# IDs & Crypto
|
|
nanoid = "=0.5.0"
|
|
uuid = { version = "=1.23.4", features = ["v4", "v5", "serde"] }
|
|
sqids = "=0.4.2"
|
|
rand = "=0.10.2"
|
|
rand_08 = { package = "rand", version = "=0.8.6" }
|
|
rand_chacha_08 = { package = "rand_chacha", version = "=0.3.1" }
|
|
base64 = "=0.22.1"
|
|
humantime = "=2.4.0"
|
|
hex = "=0.4.3"
|
|
chrono-tz = "=0.10.4"
|
|
sha2_010 = { package = "sha2", version = "=0.10.9" }
|
|
iana-time-zone = "=0.1.65"
|
|
|
|
# Streaming (consolidated xiu crate)
|
|
synctv-xiu = { path = "synctv-xiu", default-features = false }
|
|
|
|
# Object Storage
|
|
opendal = { version = "=0.58.0", default-features = false, features = [
|
|
"executors-tokio",
|
|
"services-s3",
|
|
] }
|
|
opendal-http-transport-reqwest = { version = "=0.58.0", default-features = false, features = ["rustls-no-provider"] }
|
|
|
|
# Logging & Tracing
|
|
tracing = "=0.1.44"
|
|
tracing-subscriber = { version = "=0.3.23", features = [
|
|
"env-filter",
|
|
"json",
|
|
"fmt",
|
|
] }
|
|
tracing-appender = "=0.2.5"
|
|
dotenvy = "=0.15.7"
|
|
|
|
# Configuration
|
|
config = "=0.15.25"
|
|
clap = { version = "=4.6.1", features = ["derive"] }
|
|
clap_complete = "=4.6.7"
|
|
|
|
# Utilities
|
|
anyhow = "=1.0.103"
|
|
thiserror = "=2.0.18"
|
|
bytes = { version = "=1.12.1", features = ["serde"] }
|
|
parking_lot = "=0.12.5"
|
|
async-trait = "=0.1.89"
|
|
futures = "=0.3.32"
|
|
futures-util = "=0.3.32"
|
|
hostname = "=0.4.2"
|
|
url = "=2.5.8"
|
|
percent-encoding = "=2.3.2"
|
|
urlencoding = "=2.1.3"
|
|
regex = "=1.13.0"
|
|
oxc_allocator = "=0.139.0"
|
|
oxc_ast = "=0.139.0"
|
|
oxc_parser = "=0.139.0"
|
|
oxc_span = "=0.139.0"
|
|
boa_engine = { version = "=0.21.1", default-features = false }
|
|
paste = "=1.0.15"
|
|
byteorder = "=1.5.0"
|
|
http = "=1.4.2"
|
|
garde = { version = "=0.23.0", features = ["derive"] }
|
|
zxcvbn = { version = "=3.1.1", default-features = false }
|
|
|
|
# Monitoring
|
|
prometheus = { version = "=0.14.0", features = ["process"] }
|
|
|
|
# Time
|
|
chrono = { version = "=0.4.45", features = ["serde"] }
|
|
html-escape = "=0.2.14"
|
|
rsntp = "=4.1.2"
|
|
|
|
|
|
# Kubernetes (in-cluster client for leader election & service discovery)
|
|
kube = { version = "=4.0.0", default-features = false, features = ["runtime", "client", "derive"] }
|
|
k8s-openapi = { version = "=0.28.0", features = ["latest"] }
|
|
|
|
# TLS
|
|
tokio-rustls = { version = "=0.26.4", default-features = false, features = ["logging", "tls12"] }
|
|
rustls = { version = "=0.23.41", default-features = false, features = ["std", "logging", "tls12"] }
|
|
rustls-pemfile = "=2.2.0"
|
|
hyper-util = { version = "=0.1.20", features = ["client-legacy", "tokio", "http2"] }
|
|
|
|
# Networking
|
|
ipnet = "=2.12.0"
|
|
tokio-socks = "=0.5.2"
|
|
webpki-roots = "=1.0.4"
|
|
|
|
# Email
|
|
lettre = { version = "=0.11.22", default-features = false, features = [
|
|
"tokio1-rustls",
|
|
"rustls-no-provider",
|
|
"webpki-roots",
|
|
"builder",
|
|
"smtp-transport",
|
|
"pool",
|
|
"hostname",
|
|
"tokio1",
|
|
] }
|
|
handlebars = "=6.4.2"
|
|
|
|
# Compression
|
|
flate2 = "=1.1.9"
|
|
brotli = "=8.0.4"
|
|
lz4_flex = "=0.13.1"
|
|
zstd = "=0.13.3"
|
|
image = { version = "=0.25.10", default-features = false, features = ["jpeg", "png", "webp", "avif", "rayon"] }
|
|
symphonia = { version = "=0.6.0", default-features = false, features = ["aac", "flac", "isomp4", "mkv", "mp3", "ogg", "vorbis", "wav"] }
|
|
|
|
# Resilience
|
|
governor = "=0.10.4"
|
|
nonzero_ext = "=0.3.0"
|
|
backon = "=1.6.0"
|
|
failsafe = "=1.3.0"
|
|
|
|
# Data Structures
|
|
async_singleflight = "=0.6.2"
|
|
rayon = "=1.12.0"
|
|
|
|
# HTTP Body
|
|
http-body-util = "=0.1.3"
|
|
utoipa = { version = "=5.5.0", default-features = false, features = [
|
|
"macros",
|
|
"axum_extras",
|
|
"preserve_order",
|
|
"preserve_path_order",
|
|
] }
|
|
utoipa-swagger-ui = { version = "=9.0.2", default-features = false, features = [
|
|
"axum",
|
|
"vendored",
|
|
] }
|
|
|
|
# Testing
|
|
mockall = "=0.15.0"
|
|
wiremock = "=0.6.5"
|
|
tempfile = "=3.27.0"
|
|
testcontainers = { version = "=0.27.3", default-features = false }
|
|
testcontainers-modules = { version = "=0.15.0", default-features = false, features = [
|
|
"postgres",
|
|
"redis",
|
|
"rustfs",
|
|
] }
|
|
tokio-tungstenite = { version = "=0.30.0", default-features = false, features = ["connect"] }
|
|
|
|
# Benchmarking
|
|
criterion = { version = "=0.8.2", features = ["html_reports", "async_tokio"] }
|
|
|
|
# Allocators
|
|
tikv-jemallocator = "=0.7.0"
|
|
mimalloc = { version = "=0.1.52", features = ["v2"] }
|
|
|
|
# Internal workspace crates
|
|
synctv-proto = { path = "synctv-proto", default-features = false }
|
|
synctv-proto-build = { path = "synctv-proto-build" }
|
|
synctv-proto-main = { path = "synctv-proto-main", default-features = false }
|
|
synctv-proto-providers = { path = "synctv-proto-providers", default-features = false }
|
|
synctv-proto-playback-provider = { path = "synctv-proto-playback-provider", default-features = false }
|
|
synctv-core = { path = "synctv-core", default-features = false }
|
|
synctv-core-testing = { path = "synctv-core/testing", default-features = false }
|
|
synctv-adapter = { path = "synctv-adapter", default-features = false }
|
|
synctv-api = { path = "synctv-api", default-features = false }
|
|
synctv-api-common = { path = "synctv-api-common", default-features = false }
|
|
synctv-api-http = { path = "synctv-api-http", default-features = false }
|
|
synctv-api-grpc = { path = "synctv-api-grpc", default-features = false }
|
|
synctv-cluster = { path = "synctv-cluster", default-features = false }
|
|
synctv-realtime = { path = "synctv-realtime", default-features = false }
|
|
synctv-media-providers = { path = "synctv-media-providers", default-features = false }
|
|
synctv-management = { path = "synctv-management", default-features = false }
|
|
synctv-proxy = { path = "synctv-proxy", default-features = false }
|
|
synctv-livestream = { path = "synctv-livestream", default-features = false }
|
|
synctv-common = { path = "synctv-common", default-features = false }
|
|
|
|
# Redis 1.4.1 expands combine 4.6.7's `opaque!` macro and triggers Rust's
|
|
# `semicolon_in_expressions_from_macros` future-incompatibility report. Redis
|
|
# #2217/#2218 only suppress the lint; combine #372/#373 removes the offending
|
|
# semicolon. Remove this patch after crates.io publishes that combine fix.
|
|
# https://github.com/Marwes/combine/pull/373
|
|
[patch.crates-io]
|
|
combine = { git = "https://github.com/Marwes/combine.git", rev = "140f091afbb0e68c44b758ea96de6bc321b5e99d" }
|
|
|
|
[profile.dev]
|
|
debug = 0
|
|
strip = "symbols"
|
|
|
|
[profile.release]
|
|
opt-level = 2
|
|
codegen-units = 1
|
|
debug = 0
|
|
lto = "thin"
|
|
panic = "unwind"
|
|
strip = "symbols"
|
|
debug-assertions = false
|
|
overflow-checks = false
|