diff --git a/Cargo.lock b/Cargo.lock index fc842dc..735750e 100644 Binary files a/Cargo.lock and b/Cargo.lock differ diff --git a/Cargo.toml b/Cargo.toml index a52b16f..eef9a81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,4 @@ [workspace] -members = ["crates/*", "packages/*", "xtask"] exclude = [ "crates/pinakes-core/tests/fixtures/test-plugin", "examples/plugins/auto-tagger", @@ -7,88 +6,61 @@ exclude = [ "examples/plugins/subtitle-detector", "examples/plugins/cbz-comics", ] +members = [ "crates/*", "packages/*", "xtask" ] resolver = "3" [workspace.package] -edition = "2024" # keep in sync with .rustfmt.toml -version = "0.3.0-dev" -license = "EUPL-1.2" -readme = true -rust-version = "1.95.0" # follows nightly Rust +edition = "2024" # keep in sync with .rustfmt.toml +license = "EUPL-1.2" +rust-version = "1.95.0" +version = "0.4.0-dev" +readme = true [workspace.dependencies] # Crate components for Pinakes. Those are the internal dependencies that are built # while building any package. -pinakes-core = { path = "./crates/pinakes-core" } -pinakes-plugin-api = { path = "./crates/pinakes-plugin-api" } -pinakes-migrations = { path = "./crates/pinakes-migrations" } -pinakes-types = { path = "./crates/pinakes-types" } -pinakes-metadata = { path = "./crates/pinakes-metadata" } -pinakes-plugin = { path = "./crates/pinakes-plugin" } +pinakes-core = { path = "./crates/pinakes-core" } pinakes-enrichment = { path = "./crates/pinakes-enrichment" } -pinakes-sync = { path = "./crates/pinakes-sync" } +pinakes-metadata = { path = "./crates/pinakes-metadata" } +pinakes-migrations = { path = "./crates/pinakes-migrations" } +pinakes-plugin = { path = "./crates/pinakes-plugin" } +pinakes-plugin-api = { path = "./crates/pinakes-plugin-api" } +pinakes-sync = { path = "./crates/pinakes-sync" } +pinakes-types = { path = "./crates/pinakes-types" } # Pinakes itself is a REST API server. UI and TUI are official visual components # that connect to the server. Using the API documentation, the user can write # their own clients, but we separate "crates" and "packages" to establish the # distinction properly. pinakes-server = { path = "./packages/pinakes-server" } -pinakes-ui = { path = "./packages/pinakes-ui" } -pinakes-tui = { path = "./packages/pinakes-tui" } +pinakes-tui = { path = "./packages/pinakes-tui" } +pinakes-ui = { path = "./packages/pinakes-ui" } # Other dependencies. Declaring them in the virtual manifests lets use reuse the crates # without having to track individual crate version across different types of crates. This # also includes *dev* dependencies. -tokio = { version = "1.52.3", features = ["full"] } -tokio-util = { version = "0.7.18", features = ["rt"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" -toml = "1.1.2" -clap = { version = "4.6.1", features = ["derive", "env"] } -chrono = { version = "0.4.44", features = ["serde"] } -uuid = { version = "1.23.1", features = ["v7", "serde"] } -thiserror = "2.0.18" +ammonia = "4.1.2" anyhow = "1.0.102" -tracing = "0.1.44" -tracing-subscriber = { version = "0.3.23", features = ["env-filter", "json"] } -blake3 = "1.8.5" -rustc-hash = "2.1.2" -ed25519-dalek = { version = "2.2.0", features = ["std"] } -lofty = "0.24.0" -lopdf = "0.40.0" -epub = "2.1.5" -matroska = "0.30.1" -gray_matter = "0.3.2" -kamadak-exif = "0.6.1" -rusqlite = { version = "0.39.0", features = ["bundled", "column_decltype"] } -tokio-postgres = { version = "0.7.17", features = [ - "with-uuid-1", - "with-chrono-0_4", - "with-serde_json-1", -] } -deadpool-postgres = "0.14.1" -postgres-types = { version = "0.2.13", features = ["derive"] } -postgres-native-tls = "0.5.3" -native-tls = "0.2.18" -refinery = { version = "0.9.1", features = ["tokio-postgres"] } -rusqlite_migration = "2.5.0" -walkdir = "2.5.0" -notify = { version = "8.2.0", features = ["macos_fsevent"] } -winnow = "1.0.3" -axum = { version = "0.8.9", features = ["macros", "multipart"] } -axum-server = { version = "0.8.0" } -tower = "0.5.3" -tower-http = { version = "0.6.11", features = ["cors", "trace", "set-header"] } -governor = "0.10.4" -tower_governor = "0.8.0" -reqwest = { version = "0.13.3", features = ["json", "query", "blocking"] } -url = "2.5" -ratatui = "0.30.0" -crossterm = "0.29.0" -dioxus = { version = "0.7.9", features = ["desktop", "router"] } -dioxus-core = { version = "0.7.9" } +argon2 = { version = "0.5.3", features = [ "std" ] } async-trait = "0.1.89" +axum = { version = "0.8.9", features = [ "macros", "multipart" ] } +axum-server = { version = "0.8.0" } +blake3 = "1.8.5" +chrono = { version = "0.4.44", features = [ "serde" ] } +clap = { version = "4.6.1", features = [ "derive", "env" ] } +crossterm = "0.29.0" +deadpool-postgres = "0.14.1" +dioxus = { version = "0.7.9", features = [ "desktop", "router" ] } +dioxus-core = { version = "0.7.9" } +dioxus-free-icons = { version = "0.10.0", features = [ "font-awesome-solid" ] } +ed25519-dalek = { version = "2.2.0", features = [ "std" ] } +epub = "2.1.5" futures = "0.3.32" +gloo-timers = { version = "0.4.0", features = [ "futures" ] } +governor = "0.10.4" +gray_matter = "0.3.2" +http = "1.4.0" +http-body-util = "0.1.3" image = { version = "0.25.10", default-features = false, features = [ "jpeg", "png", @@ -97,72 +69,97 @@ image = { version = "0.25.10", default-features = false, features = [ "tiff", "bmp", ] } -pulldown-cmark = "0.13.4" -ammonia = "4.1.2" -argon2 = { version = "0.5.3", features = ["std"] } -mime_guess = "2.0.5" -regex = "1.12.3" -dioxus-free-icons = { version = "0.10.0", features = ["font-awesome-solid"] } -rfd = "0.17.2" -gloo-timers = { version = "0.4.0", features = ["futures"] } -rand = "0.10.1" -moka = { version = "0.12.15", features = ["future"] } -urlencoding = "2.1.3" image_hasher = "3.1.1" +kamadak-exif = "0.6.1" +lofty = "0.24.0" +lopdf = "0.40.0" +matroska = "0.30.1" +mime_guess = "2.0.5" +moka = { version = "0.12.15", features = [ "future" ] } +native-tls = "0.2.18" +notify = { version = "8.2.0", features = [ "macos_fsevent" ] } percent-encoding = "2.3.2" -http = "1.4.0" -wasmtime = { version = "44.0.1", features = ["component-model"] } -wit-bindgen = "0.57.1" +postgres-native-tls = "0.5.3" +postgres-types = { version = "0.2.13", features = [ "derive" ] } +pulldown-cmark = "0.13.4" +rand = "0.10.1" +ratatui = "0.30.0" +refinery = { version = "0.9.1", features = [ "tokio-postgres" ] } +regex = "1.12.3" +reqwest = { version = "0.13.3", features = [ "json", "query", "blocking" ] } +rfd = "0.17.2" +rusqlite = { version = "0.39.0", features = [ "bundled", "column_decltype" ] } +rusqlite_migration = "2.5.0" +rustc-hash = "2.1.2" +serde = { version = "1.0.228", features = [ "derive" ] } +serde_json = "1.0.150" tempfile = "3.27.0" -utoipa = { version = "5.5.0", features = ["axum_extras", "uuid", "chrono"] } +thiserror = "2.0.18" +tokio = { version = "1.52.3", features = [ "full" ] } +tokio-postgres = { version = "0.7.17", features = [ "with-uuid-1", "with-chrono-0_4", "with-serde_json-1" ] } +tokio-util = { version = "0.7.18", features = [ "rt" ] } +toml = "1.1.2" +tower = "0.5.3" +tower-http = { version = "0.6.11", features = [ "cors", "trace", "set-header" ] } +tower_governor = "0.8.0" +tracing = "0.1.44" +tracing-subscriber = { version = "0.3.23", features = [ "env-filter", "json" ] } +url = "2.5" +urlencoding = "2.1.3" +utoipa = { version = "5.5.0", features = [ "axum_extras", "uuid", "chrono" ] } utoipa-axum = { version = "0.2.0" } -utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] } -http-body-util = "0.1.3" +utoipa-swagger-ui = { version = "9.0.2", features = [ "axum" ] } +uuid = { version = "1.23.1", features = [ "v7", "serde" ] } +walkdir = "2.5.0" +wasmtime = { version = "45.0.0", features = [ "component-model" ] } +winnow = "1.0.3" +wit-bindgen = "0.57.1" # See: # [workspace.lints.clippy] -cargo = { level = "warn", priority = -1 } +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 } +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" +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" -too_many_arguments = "allow" +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" +significant_drop_tightening = "allow" # rusqlite Statement<'conn> borrows the guard; cannot drop early +similar_names = "allow" +single_call_fn = "allow" +std_instead_of_core = "allow" +too_long_first_doc_paragraph = "allow" +too_many_arguments = "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 @@ -170,23 +167,23 @@ too_many_arguments = "allow" cargo_common_metadata = "allow" # In the honor of a recent Cloudflare regression -panic = "deny" +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. -expect_used = "warn" -print_stderr = "warn" -print_stdout = "warn" -todo = "warn" +expect_used = "warn" +print_stderr = "warn" +print_stdout = "warn" +todo = "warn" unimplemented = "warn" -unreachable = "warn" +unreachable = "warn" [profile.dev.package] -blake3 = { opt-level = 3 } -image = { opt-level = 3 } -regex = { opt-level = 3 } -argon2 = { opt-level = 3 } +argon2 = { opt-level = 3 } +blake3 = { opt-level = 3 } +image = { opt-level = 3 } +lofty = { opt-level = 3 } +lopdf = { opt-level = 3 } matroska = { opt-level = 3 } -lopdf = { opt-level = 3 } -lofty = { opt-level = 3 } +regex = { opt-level = 3 }