[workspace]
members = ["crates/*", "xtask"]
# Only compile / check / document the public crates by default
default-members = ["crates/*"]
resolver = "2"

[workspace.package]
rust-version = "1.75"

[workspace.dependencies]
as_variant = "1.2.0"
assert_matches2 = "0.1.0"
assign = "1.1.1"
base64 = "0.22.0"
bytes = "1.0.1"
criterion = "0.5.0"
http = "1.1.0"
js_int = "0.2.2"
maplit = "1.0.2"
rand = "0.8.5"
ruma-appservice-api = { version = "0.10.0", path = "crates/ruma-appservice-api" }
ruma-common = { version = "0.13.0", path = "crates/ruma-common" }
ruma-client = { version = "0.13.0", path = "crates/ruma-client" }
ruma-client-api = { version = "0.18.0", path = "crates/ruma-client-api" }
ruma-events = { version = "0.28.1", path = "crates/ruma-events" }
ruma-federation-api = { version = "0.9.0", path = "crates/ruma-federation-api" }
ruma-html = { version = "0.2.0", path = "crates/ruma-html" }
ruma-identifiers-validation = { version = "0.9.5", path = "crates/ruma-identifiers-validation" }
ruma-identity-service-api = { version = "0.9.0", path = "crates/ruma-identity-service-api" }
ruma-macros = { version = "=0.13.0", path = "crates/ruma-macros" }
ruma-push-gateway-api = { version = "0.9.0", path = "crates/ruma-push-gateway-api" }
ruma-signatures = { version = "0.15.0", path = "crates/ruma-signatures" }
ruma-server-util = { version = "0.3.0", path = "crates/ruma-server-util" }
ruma-state-res = { version = "0.11.0", path = "crates/ruma-state-res" }
serde = { version = "1.0.164", features = ["derive"] }
serde_html_form = "0.2.0"
serde_json = "1.0.87"
smallvec = { version = "1.13.2", features = ["const_generics", "const_new", "serde", "union", "write"] }
thiserror = "2.0.0"
tracing = { version = "0.1.37", default-features = false, features = ["std"] }
url = { version = "2.5.0" }
web-time = "1.1.0"

[workspace.lints.rust]
rust_2018_idioms = { level = "warn", priority = -1 }
semicolon_in_expressions_from_macros = "warn"
unexpected_cfgs = { level = "warn", check-cfg = [
    'cfg(ruma_identifiers_storage, values("Arc"))', # used by the IdZst macro
] }
unreachable_pub = "warn"
unused_import_braces = "warn"
unused_qualifications = "warn"
#too many cfgs; false positives with --all-features
dead_code = { level = "allow", priority = 1 }
# library consumer messages
deprecated = { level = "allow", priority = 1 }

[workspace.lints.clippy]
branches_sharing_code = "warn"
cloned_instead_of_copied = "warn"
dbg_macro = "warn"
disallowed_types = "warn"
empty_line_after_outer_attr = "warn"
inefficient_to_string = "warn"
macro_use_imports = "warn"
map_flatten = "warn"
missing_enforced_import_renames = "warn"
mod_module_files = "warn"
mut_mut = "warn"
nonstandard_macro_braces = "warn"
semicolon_if_nothing_returned = "warn"
str_to_string = "warn"
todo = "warn"
unreadable_literal = "warn"
unseparated_literal_suffix = "warn"
wildcard_imports = "warn"

# Not that good of a lint
new_without_default = "allow"
# Disabled temporarily because it triggers false positives for types with generics.
arc_with_non_send_sync = "allow"
exhaustive_structs = { level = "allow", priority = 1 }

[profile.dev]
# Speeds up test times by more than 10% in a simple test
# Set to 1 or 2 if you want to use a debugger in this workspace
debug = 0

[profile.dev.package]
# Also speeds up test times a little bit
quote = { opt-level = 2 }
