[workspace]
resolver = "2"
members = [ "crates/database", "crates/server" , "./crates/human-friendly-ids" , "crates/human-friendly-ids"]
[workspace.dependencies]
database = { path = "crates/database" }
server = { path = "crates/server" }
human-friendly-ids = { path = "crates/human-friendly-ids" }
async-stream = "0.3.6"
axum = "0.8.2"
axum-extra = "0.11.0"
axum-tracing-opentelemetry = "0.26.0"
base64 = "0.22.1"
bon = "3.0.2"
chrono = "0.4.38"
futures = "0.3.31"
handlebars = "6.2.0"
opentelemetry = "0.28.0"
opentelemetry-appender-tracing = "0.28.1"
opentelemetry-http = "0.28.0"
opentelemetry-otlp = "0.28.0"
opentelemetry_sdk = "0.28.0"
rand = "0.9.0"
reqwest = { version = "0.12.9", default-features = false }
reqwest-middleware = "0.4.0"
serde = "1.0.215"
serde_json = "1.0.133"
sqlx = { version = "0.8.2", default-features = false }
ssh-key = "0.6.7"
thiserror = "2.0.11"
tokio = "1.41.1"
tokio-util = "0.7.12"
tower = "0.5.1"
tower-http = "0.6.2"
tower-otel-http-metrics = "0.12.0"
tracing = "0.1.40"
tracing-opentelemetry = "0.29.0"
tracing-subscriber = "0.3.18"
uuid = "1.11.0"
httpmock = "0.7.0"
insta = "1.41.1"
itertools = "0.14.0"
mutants = "0.0.3"
tokio-test = "0.4.4"
tracing-test = "0.2.5"
url = "2.5.4"
assert_cmd = "2.0.16"
indexmap = "2.7.1"
predicates = "3.1.3"
regex = "1.11.1"
tempfile = "3.15.0"
vergen = "9.0.4"
vergen-gitcl = "1.0.5"
libc = "0.2.169"
reqwest-tracing = "0.5.5"
rstest = "0.25.0"
tower_governor = "0.6.0"
[profile.dev.package]
insta.opt-level = 3
similar.opt-level = 3
[profile.release]
lto = true
codegen-units = 1
opt-level = 3
debug = true
[workspace.lints.rust]
unsafe_code = "deny"
[workspace.lints.clippy]
too_many_arguments = "allow"
type_complexity = "allow"
get_first = "allow"
default_constructed_unit_structs = "allow"
expect_used = "allow"
cloned_instead_of_copied = "warn"
default_numeric_fallback = "allow"
transmute_ptr_to_ptr = "deny"
unchecked_duration_subtraction = "deny"
unsafe_derive_deserialize = "deny"
as_underscore = "deny"
arithmetic_side_effects = "deny"
cast_lossless = "deny"
checked_conversions = "deny"
ptr_as_ptr = "deny"
ptr_cast_constness = "deny"
invalid_upcast_comparisons = "deny"
wildcard_dependencies = "deny"
match_on_vec_items = "deny"
default_union_representation = "forbid"
filetype_is_file = "deny"
indexing_slicing = "deny"
lossy_float_literal = "deny"
string_slice = "deny"
undocumented_unsafe_blocks = "deny"
debug_assert_with_mut_call = "deny"
large_stack_frames = "warn"
unwrap_used = "warn"
needless_raw_string_hashes = "warn"
fallible_impl_from = "deny"
unicode_not_nfc = "warn"
unnecessary_box_returns = "warn"
unused_async = "warn"
zero_sized_map_values = "warn"
mut_mut = "warn"
redundant_feature_names = "warn"
dbg_macro = "warn"
else_if_without_else = "warn"
empty_drop = "warn"
exit = "warn"
float_cmp_const = "warn"
fn_to_numeric_cast_any = "warn"
format_push_string = "warn"
large_include_file = "warn"
let_underscore_must_use = "warn"
rc_mutex = "warn"
rest_pat_in_fully_bound_structs = "warn"
same_name_method = "warn"
unnecessary_self_imports = "warn"
branches_sharing_code = "warn"
clear_with_drain = "warn"
collection_is_never_read = "warn"
empty_line_after_doc_comments = "warn"
empty_line_after_outer_attr = "warn"
needless_collect = "warn"
needless_pass_by_ref_mut = "warn"
or_fun_call = "warn"
path_buf_push_overwrite = "warn"
read_zero_byte_vec = "warn"
readonly_write_lock = "warn"
redundant_clone = "warn"
redundant_pub_crate = "warn"
significant_drop_in_scrutinee = "deny"
significant_drop_tightening = "warn"
trait_duplication_in_bounds = "warn"
unused_peekable = "warn"
unused_rounding = "warn"
negative_feature_names = "warn"
macro_use_imports = "warn"
inconsistent_struct_constructor = "warn"
implicit_clone = "warn"
fn_params_excessive_bools = "warn"
enum_glob_use = "warn"
iter_not_returning_iterator = "warn"
manual_string_new = "warn"
mismatching_type_param_order = "warn"
should_panic_without_expect = "warn"
unnested_or_patterns = "warn"
semicolon_if_nothing_returned = "warn"
unreadable_literal = "warn"
used_underscore_binding = "warn"
verbose_bit_mask = "warn"
from_iter_instead_of_collect = "warn"
deref_by_slicing = "warn"
empty_structs_with_brackets = "warn"
error_impl_error = "warn"
if_then_some_else_none = "warn"
impl_trait_in_params = "warn"
missing_assert_message = "warn"
multiple_inherent_impl = "warn"
needless_raw_strings = "warn"
pub_without_shorthand = "warn"
self_named_module_files = "warn"
semicolon_inside_block = "warn"
unseparated_literal_suffix = "warn"
string_add = "warn"
string_to_string = "warn"
tests_outside_test_module = "warn"
try_err = "warn"
unneeded_field_pattern = "allow"
verbose_file_reads = "warn"
wildcard_enum_match_arm = "deny"
derive_partial_eq_without_eq = "warn"
iter_on_empty_collections = "warn"
iter_on_single_items = "warn"
iter_with_drain = "warn"
missing_const_for_fn = "warn"
nonstandard_macro_braces = "warn"
suboptimal_flops = "warn"
tuple_array_conversions = "warn"
type_repetition_in_bounds = "warn"
unnecessary_struct_initialization = "warn"
use_self = "warn"
useless_let_if_seq = "warn"
string_add_assign = "warn"
trivially_copy_pass_by_ref = "warn"
unused_self = "warn"
assertions_on_result_states = "warn"
clone_on_ref_ptr = "warn"
create_dir = "warn"
missing_docs_in_private_items = "warn"
mixed_read_write_in_expression = "warn"
string_lit_chars_any = "warn"
allow_attributes_without_reason = "forbid"