[package] name = "ncro" version = "1.0.0" edition = "2024" license = "MIT" [dependencies] anyhow = "1.0.102" async-trait = "0.1.89" axum = { version = "0.8.9", features = [ "macros" ] } base64 = "0.22.1" bytes = "1.11.1" chrono = { version = "0.4.44", features = [ "serde" ] } clap = { version = "4.6.1", features = [ "derive", "env" ] } ed25519-dalek = { version = "2.2.0", features = [ "rand_core" ] } futures-util = "0.3.32" hex = "0.4.3" http = "1.4.0" http-body-util = "0.1.3" humantime-serde = "1.1.1" mdns-sd = "0.15.2" prometheus = "0.14.0" rand = "0.8.6" reqwest = { version = "0.12.28", default-features = false, features = [ "rustls-tls", "stream" ] } rmp-serde = "1.3.1" serde = { version = "1.0.228", features = [ "derive" ] } serde_json = "1.0.149" serde_yaml = "0.9.34" sqlx = { version = "0.8.6", default-features = false, features = [ "runtime-tokio-rustls", "sqlite", "macros", "migrate", "chrono", ] } thiserror = "2.0.18" tokio = { version = "1.52.3", features = [ "macros", "rt-multi-thread", "signal", "time", "net", "fs" ] } tokio-util = { version = "0.7.18", features = [ "io" ] } tower-http = { version = "0.6.10", features = [ "trace" ] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.23", features = [ "env-filter", "json" ] } url = "2.5.8" [dev-dependencies] tempfile = "3.27.0" tower = { version = "0.5.3", features = [ "util" ] } # See: # [lints.clippy] cargo = { level = "warn", priority = -1 } complexity = { level = "warn", priority = -1 } nursery = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } perf = { level = "warn", priority = -1 } style = { level = "warn", priority = -1 } # The lint groups above enable some less-than-desirable rules, we should manually # enable those to keep our sanity. absolute_paths = "allow" arbitrary_source_item_ordering = "allow" clone_on_ref_ptr = "warn" dbg_macro = "warn" empty_drop = "warn" empty_structs_with_brackets = "warn" exit = "warn" filetype_is_file = "warn" get_unwrap = "warn" implicit_return = "allow" infinite_loop = "warn" map_with_unused_argument_over_ranges = "warn" missing_docs_in_private_items = "allow" multiple_crate_versions = "allow" # :( non_ascii_literal = "allow" non_std_lazy_statics = "warn" pathbuf_init_then_push = "warn" pattern_type_mismatch = "allow" question_mark_used = "allow" rc_buffer = "warn" rc_mutex = "warn" rest_pat_in_fully_bound_structs = "warn" similar_names = "allow" single_call_fn = "allow" std_instead_of_core = "allow" too_long_first_doc_paragraph = "allow" too_many_lines = "allow" undocumented_unsafe_blocks = "warn" unnecessary_safety_comment = "warn" unused_result_ok = "warn" unused_trait_names = "allow" # False positive: # clippy's build script check doesn't recognize workspace-inherited metadata # which means in our current workspace layout, we get pranked by Clippy. cargo_common_metadata = "allow" # In the honor of a recent Cloudflare regression panic = "deny" unwrap_used = "deny" # Less dangerous, but we'd like to know # Those must be opt-in, and are fine ONLY in tests and examples. We *can* panic # in NDG (the binary crate), but it should be very deliberate expect_used = "warn" print_stderr = "warn" print_stdout = "warn" todo = "warn" unimplemented = "warn" unreachable = "warn" [profile.dev] debug = true opt-level = 0 [profile.release] codegen-units = 1 lto = true opt-level = "z" panic = "abort" strip = "symbols"