[workspace]
members = ["crates/bin/*", "crates/lib/*", "crates/macro/*", "crates/service/*"]
resolver = "2"

[workspace.package]
rust-version = "1.90.0"
edition = "2024"
version = "0.0.1"

[workspace.lints.rust]
unused_import_braces = "deny"
unit_bindings = "deny"
single_use_lifetimes = "deny"
non_ascii_idents = "deny"
macro_use_extern_crate = "deny"
elided_lifetimes_in_paths = "deny"
absolute_paths_not_starting_with_crate = "deny"
explicit_outlives_requirements = "warn"
unused_crate_dependencies = "warn"
redundant_lifetimes = "warn"
missing_docs = "allow"

[workspace.lints.clippy]
todo = "deny"
uninlined_format_args = "allow"
result_large_err = "allow"
too_many_arguments = "allow"
upper_case_acronyms = "deny"
needless_return = "allow"
new_without_default = "allow"
tabs_in_doc_comments = "allow"
dbg_macro = "deny"
allow_attributes = "deny"
create_dir = "deny"
filetype_is_file = "deny"
integer_division = "allow"
lossy_float_literal = "deny"
map_err_ignore = "deny"
mutex_atomic = "deny"
needless_raw_strings = "deny"
str_to_string = "deny"
string_add = "deny"
string_to_string = "deny"
use_debug = "allow"
verbose_file_reads = "deny"
large_types_passed_by_value = "deny"
wildcard_dependencies = "deny"
negative_feature_names = "deny"
redundant_feature_names = "deny"
multiple_crate_versions = "allow"
missing_safety_doc = "warn"
identity_op = "allow"
print_stderr = "deny"
print_stdout = "deny"
comparison_chain = "allow"
unimplemented = "deny"
unwrap_used = "warn"
expect_used = "warn"
type_complexity = "allow"


#
# MARK: dependencies
#

[workspace.dependencies]
macro-assets = { path = "crates/macro/macro-assets" }
macro-sass = { path = "crates/macro/macro-sass" }
assetserver = { path = "crates/lib/assetserver" }
libservice = { path = "crates/lib/libservice" }
toolbox = { path = "crates/lib/toolbox" }

service-webpage = { path = "crates/service/service-webpage" }


#
# MARK: Servers
#
axum = { version = "0.8.6", features = ["macros", "multipart"] }
tower-http = { version = "0.6.6", features = ["trace"] }
utoipa = "5.4.0"
utoipa-swagger-ui = { version = "9.0.2", features = [
	"axum",
	"debug-embed",
	"vendored",
] }
maud = { version = "0.27.0", features = ["axum"] }
grass = "0.13.4"
markdown-it = "0.6.1"
emojis = "0.8.0"

#
# MARK: Async & Parallelism
#
tokio = { version = "1.48.0", features = ["full"] }

#
# MARK: CLI & logging
#
tracing = "0.1.41"
tracing-subscriber = { version = "0.3.20", features = ["env-filter", "json"] }
tracing-loki = { version = "0.2.6", features = [
	"rustls",
	"compat-0-2-1",
], default-features = false }
clap = { version = "4.5.51", features = ["derive"] }
anstyle = { version = "1.0.13" }

#
# MARK: Serialization & formats
#
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.145"
toml = "0.9.8"
serde_yaml = "0.9"
base64 = "0.22.1"

#
# MARK: Misc helpers
#
strum = { version = "0.27", features = ["derive"] }
thiserror = "2.0.12"
itertools = "0.14.0"
anyhow = "1.0.97"
url = { version = "2.5.7", features = ["serde"] }
num = "0.4.3"
chrono = "0.4.42"
lru = "0.16.2"
parking_lot = "0.12.5"
lazy_static = "1.5.0"

#
# Macro utilities
#
proc-macro2 = "1.0.95"
syn = "2.0.101"
quote = "1.0.40"
paste = "1.0.15"
