From 994a80c45c270d3113878542849e956971b33518 Mon Sep 17 00:00:00 2001 From: David Skrundz Date: Sun, 4 Jan 2026 20:00:13 -0700 Subject: [PATCH] Migrate to Zed and add proper newtypes --- .vscode/extensions.json | 9 - .vscode/settings.json | 33 -- .zed/settings.json | 33 ++ Cargo.lock | 732 +++++++++++++++++++++++--------- Cargo.toml | 86 ++-- crates/cli/Cargo.toml | 59 ++- crates/cli/src/run/tmdb.rs | 17 +- crates/db/Cargo.toml | 36 +- crates/db/src/entity/content.rs | 18 +- crates/db/src/entity/info.rs | 18 +- crates/db/src/entity/tmdb.rs | 36 +- crates/db/src/entity/watched.rs | 12 +- crates/flix/Cargo.toml | 26 +- crates/fs/Cargo.toml | 22 +- crates/model/Cargo.toml | 24 +- crates/model/src/numbers.rs | 76 +++- crates/tmdb/Cargo.toml | 35 +- tombi.toml | 5 + 18 files changed, 828 insertions(+), 449 deletions(-) delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json create mode 100644 .zed/settings.json create mode 100644 tombi.toml diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index c70ed43..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "recommendations": [ - "vadimcn.vscode-lldb", - "barbosshack.crates-io", - "usernamehw.errorlens", - "tamasfe.even-better-toml", - "rust-lang.rust-analyzer", - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 2f432d8..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - // VSCode - "editor.detectIndentation": false, - "editor.insertSpaces": false, - "editor.tabSize": 4, - "files.exclude": { - "**/target": true, - "**/Cargo.lock": true, - }, - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true, - "files.watcherExclude": { - "**/.git/**": true, - "**/target/**": true, - }, - // Extensions - "crates.listPreReleases": true, - "evenBetterToml.formatter.alignComments": true, - "evenBetterToml.formatter.alignEntries": false, - "evenBetterToml.formatter.allowedBlankLines": 1, - "evenBetterToml.formatter.arrayAutoExpand": true, - "evenBetterToml.formatter.arrayTrailingComma": true, - "evenBetterToml.formatter.columnWidth": 80, - "evenBetterToml.formatter.reorderKeys": true, - "evenBetterToml.formatter.trailingNewline": true, - "rust-analyzer.imports.granularity.enforce": true, - "rust-analyzer.imports.granularity.group": "module", - "rust-analyzer.imports.group.enable": true, - "rust-analyzer.imports.merge.glob": false, - "rust-analyzer.imports.preferNoStd": true, - "rust-analyzer.showUnlinkedFileNotification": false, -} diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..557a88e --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,33 @@ +{ + "project_name": null, + + "auto_install_extensions": { + "tombi": true, + "cargo-appraiser": true, + }, + + "languages": { + "TOML": { + "format_on_save": "on", + "formatter": { "language_server": { "name": "tombi" } }, + }, + }, + + "lsp": { + "rust-analyzer": { + "initialization_options": { + "imports": { + "granularity": { "enforce": true, "group": "module" }, + "group": { "enable": true }, + "merge": { "glob": false }, + "preferNoStd": true, + }, + "server": { + "extraEnv": { + "RUSTUP_TOOLCHAIN": "stable", + }, + }, + }, + }, + }, +} diff --git a/Cargo.lock b/Cargo.lock index f17d848..f882398 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -124,7 +124,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -135,7 +135,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -159,6 +159,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-lc-rs" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "base64" version = "0.22.1" @@ -167,15 +189,15 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "7d809780667f4410e7c41b07f52439b94d2bdf8528eeedc287fa38d3b7f95d82" [[package]] name = "bigdecimal" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560f42649de9fa436b73517378a147ec21f6c997a546581df4b4b31677828934" +checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" dependencies = [ "autocfg", "libm", @@ -217,9 +239,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" dependencies = [ "borsh-derive", "cfg_aliases", @@ -227,22 +249,22 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytecheck" @@ -280,14 +302,22 @@ checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cc" -version = "1.2.46" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.4" @@ -314,9 +344,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.51" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -324,9 +354,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.51" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -343,7 +373,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -352,12 +382,31 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +[[package]] +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +dependencies = [ + "cc", +] + [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -373,6 +422,16 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -390,9 +449,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -448,7 +507,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -459,7 +518,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -485,22 +544,23 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "rustc_version", + "syn 2.0.113", "unicode-xid", ] @@ -524,7 +584,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -533,6 +593,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" version = "1.15.0" @@ -572,13 +638,13 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "flix" -version = "0.0.15" +version = "0.0.16" dependencies = [ "flix-db", "flix-fs", @@ -588,7 +654,7 @@ dependencies = [ [[package]] name = "flix-cli" -version = "0.0.15" +version = "0.0.16" dependencies = [ "anyhow", "chrono", @@ -605,7 +671,7 @@ dependencies = [ [[package]] name = "flix-db" -version = "0.0.15" +version = "0.0.16" dependencies = [ "chrono", "flix-model", @@ -618,28 +684,28 @@ dependencies = [ [[package]] name = "flix-fs" -version = "0.0.15" +version = "0.0.16" dependencies = [ "async-stream", "flix-model", "regex", - "thiserror", + "thiserror 2.0.17", "tokio", "tokio-stream", ] [[package]] name = "flix-model" -version = "0.0.15" +version = "0.0.16" dependencies = [ "seamantic", "serde", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "flix-tmdb" -version = "0.0.15" +version = "0.0.16" dependencies = [ "chrono", "flix-model", @@ -649,7 +715,7 @@ dependencies = [ "sea-orm", "serde", "serde_test", - "thiserror", + "thiserror 2.0.17", "url", "url-macro", ] @@ -692,6 +758,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -835,16 +907,16 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "governor" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e23d5986fd4364c2fb7498523540618b4b8d92eec6c36a02e565f66748e2f79" +checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" dependencies = [ "cfg-if", "futures-sink", "futures-timer", "futures-util", "getrandom 0.3.4", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "nonzero_ext", "parking_lot", "portable-atomic", @@ -876,9 +948,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", @@ -941,12 +1013,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1014,14 +1085,13 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.4", ] [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -1113,9 +1183,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1127,9 +1197,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -1175,12 +1245,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -1200,7 +1270,7 @@ checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -1220,9 +1290,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -1245,15 +1315,47 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -1270,9 +1372,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libm" @@ -1282,13 +1384,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags", "libc", - "redox_syscall", + "redox_syscall 0.7.0", ] [[package]] @@ -1319,9 +1421,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru-slab" @@ -1356,9 +1458,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -1445,6 +1547,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "openssl-probe" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" + [[package]] name = "ordered-float" version = "4.6.0" @@ -1475,7 +1583,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -1502,7 +1610,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", "windows-link", ] @@ -1571,10 +1679,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "portable-atomic" -version = "1.11.1" +name = "pluralizer" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "4b3eba432a00a1f6c16f39147847a870e94e2e9b992759b503e330efec778cbe" +dependencies = [ + "once_cell", + "regex", +] + +[[package]] +name = "portable-atomic" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "potential_utf" @@ -1628,14 +1746,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -1648,7 +1766,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", "version_check", "yansi", ] @@ -1687,7 +1805,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -1699,6 +1817,7 @@ version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", @@ -1708,7 +1827,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -1817,6 +1936,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" version = "1.12.2" @@ -1857,9 +1985,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ "base64", "bytes", @@ -1877,6 +2005,7 @@ dependencies = [ "quinn", "rustls", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", "serde_urlencoded", @@ -1890,7 +2019,6 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.4", ] [[package]] @@ -1978,12 +2106,22 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustls" version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", @@ -1993,21 +2131,61 @@ dependencies = [ ] [[package]] -name = "rustls-pki-types" -version = "1.13.0" +name = "rustls-native-certs" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "web-time", "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -2021,9 +2199,27 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] [[package]] name = "scopeguard" @@ -2041,14 +2237,14 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] name = "sea-orm" -version = "2.0.0-rc.18" +version = "2.0.0-rc.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd92b1f5f1a6bee6f51523dbd030c5f617e65da6caf312f166dabb404806db86" +checksum = "25c0efc234bdf1f073cc9b448da21a22ed0ac7ff0958a0b3bc4994041dc059df" dependencies = [ "async-stream", "async-trait", @@ -2070,7 +2266,7 @@ dependencies = [ "serde_json", "sqlx", "strum", - "thiserror", + "thiserror 2.0.17", "time", "tracing", "url", @@ -2079,9 +2275,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "2.0.0-rc.18" +version = "2.0.0-rc.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669479531f1422edde78327b24b32f652a9417f5942935737a7d7c7d31e5a1a9" +checksum = "f50ae78e4442db69930949a8bcf3b82b0e992c8ea389ae2b1d80504029adab5d" dependencies = [ "chrono", "glob", @@ -2097,23 +2293,24 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "2.0.0-rc.18" +version = "2.0.0-rc.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e65b4d10f02744f19c203f2e02fac65bc718efdd98636ea445f0a8f1ee0c1d" +checksum = "35b6ce0ae263925930d4e0f95e24a5a8b069dccc61a1ef68da26338470d94929" dependencies = [ "heck 0.5.0", + "pluralizer", "proc-macro2", "quote", "sea-bae", - "syn 2.0.110", + "syn 2.0.113", "unicode-ident", ] [[package]] name = "sea-orm-migration" -version = "2.0.0-rc.18" +version = "2.0.0-rc.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c70fc91069ee40ebecc35bb671adedbd5fd9352d9b09eeed228490df7934e78" +checksum = "433fa69cd3f8dc754a2dc51106aee10262fec84ac5195ff7d9966dd1c0d467bd" dependencies = [ "async-trait", "sea-orm", @@ -2125,11 +2322,10 @@ dependencies = [ [[package]] name = "sea-query" -version = "1.0.0-rc.18" +version = "1.0.0-rc.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c71f6d768c8bb1003bbfce01431374f677abbcf7582d6a0ec4ea4c5ae20adbb" +checksum = "93948054fb2d208555a96d03d2c887591deb42ffe3210eedbd8a3234c6fb6d34" dependencies = [ - "bigdecimal", "chrono", "inherent", "ordered-float", @@ -2150,17 +2346,16 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.110", - "thiserror", + "syn 2.0.113", + "thiserror 2.0.17", ] [[package]] name = "sea-query-sqlx" -version = "0.8.0-rc.9" +version = "0.8.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68873fa1776b4c25a26e7679f8ee22332978c721168ec1b0b32b6583d5a9381d" +checksum = "693f3ac3a10a228afaf3512b122cffc07c57b4269d233c7ff60571ebb4f0dd17" dependencies = [ - "bigdecimal", "chrono", "rust_decimal", "sea-query", @@ -2172,9 +2367,9 @@ dependencies = [ [[package]] name = "sea-schema" -version = "0.17.0-rc.15" +version = "0.17.0-rc.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f99598cda516443eb35c06fe5b4496d60c8f7afca708bd998087b63ac56775" +checksum = "b363dd21c20fe4d1488819cb2bc7f8d4696c62dd9f39554f97639f54d57dd0ab" dependencies = [ "async-trait", "sea-query", @@ -2192,7 +2387,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -2203,14 +2398,43 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "seamantic" -version = "0.0.10" +version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fdfda9081467f15961b506b46c1569ac166f69b1ac17835c59a3104c3b2a79e" +checksum = "bc098b9f7e30531297bc6d38a6ee3fbffb43bcf584d87c95bc6a97413a8f9b8c" dependencies = [ "sea-orm", "sea-orm-migration", ] +[[package]] +name = "security-framework" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + [[package]] name = "serde" version = "1.0.228" @@ -2238,27 +2462,27 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -2410,7 +2634,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ "base64", - "bigdecimal", "bytes", "chrono", "crc", @@ -2434,7 +2657,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -2454,7 +2677,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -2477,7 +2700,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.110", + "syn 2.0.113", "tokio", "url", ] @@ -2490,7 +2713,6 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags", "byteorder", "bytes", @@ -2522,7 +2744,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.17", "time", "tracing", "uuid", @@ -2537,7 +2759,6 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags", "byteorder", "chrono", @@ -2555,7 +2776,6 @@ dependencies = [ "log", "md-5", "memchr", - "num-bigint", "once_cell", "rand 0.8.5", "rust_decimal", @@ -2565,7 +2785,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.17", "time", "tracing", "uuid", @@ -2592,7 +2812,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror", + "thiserror 2.0.17", "time", "tracing", "url", @@ -2653,9 +2873,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" dependencies = [ "proc-macro2", "quote", @@ -2679,7 +2899,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -2688,13 +2908,33 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.113", ] [[package]] @@ -2705,7 +2945,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -2775,9 +3015,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -2796,7 +3036,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -2811,9 +3051,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -2822,9 +3062,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.8" +version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "serde_core", "serde_spanned", @@ -2835,18 +3075,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -2856,9 +3096,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -2880,9 +3120,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags", "bytes", @@ -2910,9 +3150,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -2922,29 +3162,29 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "once_cell", @@ -3020,9 +3260,9 @@ dependencies = [ [[package]] name = "url-macro" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f1c96f9093a012822c49bd933852d5dfb8bff6d1cce079d3ba4ac5cc59e3e7" +checksum = "46f8fd02d998459be6962aa74831961202461c1545cf056725e2c73b9f860c91" dependencies = [ "url", ] @@ -3041,12 +3281,12 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -3062,6 +3302,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -3094,9 +3344,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -3107,9 +3357,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -3120,9 +3370,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3130,31 +3380,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -3170,20 +3420,29 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.4", + "webpki-roots 1.0.5", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" dependencies = [ "rustls-pki-types", ] @@ -3198,6 +3457,15 @@ dependencies = [ "wasite", ] +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "windows-core" version = "0.62.2" @@ -3219,7 +3487,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -3230,7 +3498,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -3257,6 +3525,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3293,6 +3570,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -3341,6 +3633,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -3359,6 +3657,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -3377,6 +3681,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -3407,6 +3717,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -3425,6 +3741,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -3443,6 +3765,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -3461,6 +3789,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -3481,9 +3815,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -3534,28 +3868,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] [[package]] @@ -3575,7 +3909,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", "synstructure", ] @@ -3615,5 +3949,11 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.113", ] + +[[package]] +name = "zmij" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" diff --git a/Cargo.toml b/Cargo.toml index c2f8c3d..28a1761 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,18 +1,41 @@ [workspace] -members = ["crates/*"] resolver = "2" +members = ["crates/*"] [workspace.package] -authors = [] edition = "2024" -license-file = "LICENSE.md" rust-version = "1.85.0" +license-file = "LICENSE.md" -[workspace.lints.rust] -arithmetic_overflow = "forbid" -missing_docs = "forbid" -unsafe_code = "forbid" -unused_doc_comments = "forbid" +[workspace.dependencies] +anyhow = { version = "^1", default-features = false } +async-stream = { version = "^0.3", default-features = false } +chrono = { version = "^0.4", default-features = false } +clap = { version = "^4", default-features = false } +flix = { path = "crates/flix", version = "=0.0.16", default-features = false } +flix-cli = { path = "crates/cli", version = "=0.0.16", default-features = false } +flix-db = { path = "crates/db", version = "=0.0.16", default-features = false } +flix-fs = { path = "crates/fs", version = "=0.0.16", default-features = false } +flix-model = { path = "crates/model", version = "=0.0.16", default-features = false } +flix-tmdb = { path = "crates/tmdb", version = "=0.0.16", default-features = false } +futures = { version = "^0.3", default-features = false } +governor = { version = "^0.10", default-features = false } +nonzero_ext = { version = "^0.3", default-features = false } +regex = { version = "^1", default-features = false } +reqwest = { version = "^0.13", default-features = false } +sea-orm = { version = "2.0.0-rc.27", default-features = false } +sea-orm-migration = { version = "2.0.0-rc.27", default-features = false } +seamantic = { version = "^0.0.11", default-features = false } +serde = { version = "^1", default-features = false } +serde_test = { version = "^1", default-features = false } +thiserror = { version = "^2", default-features = false } +tokio = { version = "^1", default-features = false } +tokio-stream = { version = "^0.1", default-features = false } +toml = { version = "^0.9", default-features = false } +tracing = { version = "^0.1", default-features = false } +tracing-subscriber = { version = "^0.3", default-features = false } +url = { version = "^2", default-features = false } +url-macro = { version = "^0.2", default-features = false } [workspace.lints.clippy] arithmetic_side_effects = "forbid" @@ -24,45 +47,18 @@ indexing_slicing = "forbid" integer_division = "forbid" integer_division_remainder_used = "forbid" transmute_undefined_repr = "forbid" -unchecked_duration_subtraction = "forbid" +unchecked_time_subtraction = "forbid" unwrap_used = "forbid" +[workspace.lints.rust] +arithmetic_overflow = "forbid" +missing_docs = "forbid" +unsafe_code = "forbid" +unused_doc_comments = "forbid" + [profile.release] -codegen-units = 1 -lto = "fat" opt-level = 3 -overflow-checks = true strip = "debuginfo" - -[workspace.dependencies] -flix = { path = "crates/flix", version = "=0.0.15", default-features = false } -flix-cli = { path = "crates/cli", version = "=0.0.15", default-features = false } -flix-db = { path = "crates/db", version = "=0.0.15", default-features = false } -flix-fs = { path = "crates/fs", version = "=0.0.15", default-features = false } -flix-model = { path = "crates/model", version = "=0.0.15", default-features = false } -flix-tmdb = { path = "crates/tmdb", version = "=0.0.15", default-features = false } - -seamantic = { version = "0.0.10", default-features = false } - -sea-orm = { version = "2.0.0-rc.18", default-features = false } -sea-orm-migration = { version = "2.0.0-rc.18", default-features = false } - -anyhow = { version = "^1", default-features = false } -async-stream = { version = "^0.3", default-features = false } -chrono = { version = "^0.4", default-features = false } -clap = { version = "^4", default-features = false, features = ["std"] } -futures = { version = "^0.3", default-features = false } -governor = { version = "^0.10", default-features = false } -nonzero_ext = { version = "^0.3", default-features = false } -regex = { version = "^1", default-features = false } -reqwest = { version = "^0.12", default-features = false } -serde = { version = "^1", default-features = false } -serde_test = { version = "^1", default-features = false } -thiserror = { version = "^2", default-features = false } -tokio = { version = "^1", default-features = false } -tokio-stream = { version = "^0.1", default-features = false } -toml = { version = "^0.9", default-features = false } -tracing = { version = "^0.1", default-features = false } -tracing-subscriber = { version = "^0.3", default-features = false } -url = { version = "^2", default-features = false } -url-macro = { version = "^0.2", default-features = false } +overflow-checks = true +lto = "fat" +codegen-units = 1 diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 6b7d5c8..9f8f835 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -1,15 +1,12 @@ [package] name = "flix-cli" -version = "0.0.15" - -categories = ["command-line-utilities"] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "CLI for interacting with a flix database" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = ["command-line-utilities"] [package.metadata.docs.rs] all-features = true @@ -20,9 +17,26 @@ doc = false name = "flix" path = "src/main.rs" -[lints.rust] -arithmetic_overflow = "forbid" -unsafe_code = "forbid" +[dependencies] +anyhow = { workspace = true } +chrono = { workspace = true, features = ["now"] } +clap = { workspace = true, features = [ + "color", + "derive", + "error-context", + "help", + "std", + "suggestions", + "usage", +] } +flix = { workspace = true, features = ["tmdb"] } +futures = { workspace = true } +sea-orm = { workspace = true, features = ["debug-print", "runtime-tokio"] } +serde = { workspace = true, features = ["derive"] } +tokio = { workspace = true, features = ["fs", "macros", "rt"] } +toml = { workspace = true, features = ["parse", "serde"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } [lints.clippy] arithmetic_side_effects = "deny" @@ -34,26 +48,9 @@ indexing_slicing = "deny" integer_division = "deny" integer_division_remainder_used = "deny" transmute_undefined_repr = "deny" -unchecked_duration_subtraction = "deny" +unchecked_time_subtraction = "deny" unwrap_used = "deny" -[dependencies] -flix = { workspace = true, features = ["tmdb"] } - -anyhow = { workspace = true } -chrono = { workspace = true, features = ["now"] } -clap = { workspace = true, features = [ - "derive", - "color", - "error-context", - "help", - "suggestions", - "usage", -] } -futures = { workspace = true } -sea-orm = { workspace = true, features = ["runtime-tokio", "debug-print"] } -serde = { workspace = true, features = ["derive"] } -tokio = { workspace = true, features = ["rt", "fs", "macros"] } -toml = { workspace = true, features = ["parse", "serde"] } -tracing = { workspace = true } -tracing-subscriber = { workspace = true } +[lints.rust] +arithmetic_overflow = "forbid" +unsafe_code = "forbid" diff --git a/crates/cli/src/run/tmdb.rs b/crates/cli/src/run/tmdb.rs index 64fb9ee..2532369 100644 --- a/crates/cli/src/run/tmdb.rs +++ b/crates/cli/src/run/tmdb.rs @@ -150,13 +150,20 @@ pub async fn add(client: Client, db: &DatabaseConnection, command: Command) -> R let year = show.first_air_date.year(); for season in 1..=show.number_of_seasons { - let season = client + let season = SeasonNumber::new(season); + let season = match client .seasons() .get_details(id, season, None) .await .with_context(|| { format!("seasons().get_details({}, {})", id.into_raw(), season) - })?; + }) { + Ok(season) => season, + Err(err) => { + eprintln!("{err:?}"); + continue; + } + }; if season.air_date > Utc::now().naive_utc().date() { eprintln!( "skipping season ({}, {})", @@ -166,7 +173,7 @@ pub async fn add(client: Client, db: &DatabaseConnection, command: Command) -> R break; } - let Ok(number_of_episodes) = EpisodeNumber::try_from(season.episodes.len()) else { + let Ok(number_of_episodes) = u32::try_from(season.episodes.len()) else { bail!( "could not convert {} to an EpisodeNumber", season.episodes.len() @@ -175,6 +182,7 @@ pub async fn add(client: Client, db: &DatabaseConnection, command: Command) -> R let mut season_episodes = Vec::new(); for episode in 1..=number_of_episodes { + let episode = EpisodeNumber::new(episode); let Ok(episode) = client .episodes() .get_details(id, season.season_number, episode, None) @@ -314,7 +322,7 @@ pub async fn add(client: Client, db: &DatabaseConnection, command: Command) -> R })?; let mut episodes = Vec::new(); - let Ok(number_of_episodes) = EpisodeNumber::try_from(season.episodes.len()) else { + let Ok(number_of_episodes) = u32::try_from(season.episodes.len()) else { bail!( "could not convert {} to an EpisodeNumber", season.episodes.len() @@ -322,6 +330,7 @@ pub async fn add(client: Client, db: &DatabaseConnection, command: Command) -> R }; for episode in 1..=number_of_episodes { + let episode = EpisodeNumber::new(episode); let Ok(episode) = client .episodes() .get_details(id, season.season_number, episode, None) diff --git a/crates/db/Cargo.toml b/crates/db/Cargo.toml index db34cde..5c6bcfe 100644 --- a/crates/db/Cargo.toml +++ b/crates/db/Cargo.toml @@ -1,45 +1,39 @@ [package] name = "flix-db" -version = "0.0.15" - -categories = [] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "Types for storing persistent data about media" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = [] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lints] -workspace = true - -[features] -default = [] -tmdb = ["dep:flix-tmdb"] - [dependencies] -flix-model = { workspace = true } - -flix-tmdb = { workspace = true, optional = true, features = ["sea-orm"] } - -seamantic = { workspace = true, features = ["sqlite"] } - chrono = { workspace = true } +flix-model = { workspace = true } +flix-tmdb = { workspace = true, features = ["sea-orm"], optional = true } sea-orm = { workspace = true, features = [ "entity-registry", "schema-sync", "with-chrono", ] } sea-orm-migration = { workspace = true } +seamantic = { workspace = true, features = ["sqlite"] } [dev-dependencies] sea-orm-migration = { workspace = true, features = ["runtime-tokio-rustls"] } tokio = { version = "^1", default-features = false, features = [ - "rt", "macros", + "rt", ] } + +[features] +default = [] +tmdb = ["dep:flix-tmdb"] + +[lints] +workspace = true diff --git a/crates/db/src/entity/content.rs b/crates/db/src/entity/content.rs index 789de5b..7eda9a3 100644 --- a/crates/db/src/entity/content.rs +++ b/crates/db/src/entity/content.rs @@ -384,7 +384,7 @@ pub mod test { $crate::entity::info::test::make_info_season!($db, $show, $season); $crate::entity::content::seasons::ActiveModel { show_id: Set(::flix_model::id::ShowId::from_raw($show)), - season_number: Set($season), + season_number: Set(::flix_model::numbers::SeasonNumber::new($season)), slug: Set(concat!("SS ", $show, $season).to_string()), library_id: Set(::flix_model::id::LibraryId::from_raw($lid)), directory: Set(::std::path::PathBuf::new().into()), @@ -408,8 +408,8 @@ pub mod test { $crate::entity::info::test::make_info_episode!($db, $show, $season, $episode); $crate::entity::content::episodes::ActiveModel { show_id: Set(::flix_model::id::ShowId::from_raw($show)), - season_number: Set($season), - episode_number: Set($episode), + season_number: Set(::flix_model::numbers::SeasonNumber::new($season)), + episode_number: Set(::flix_model::numbers::EpisodeNumber::new($episode)), count: Set($count), slug: Set(concat!("SSE ", $show, $season, $episode).to_string()), library_id: Set(::flix_model::id::LibraryId::from_raw($lid)), @@ -690,7 +690,7 @@ mod tests { .expect("insert"); assert_eq!(model.show_id, ShowId::from_raw($id)); - assert_eq!(model.season_number, $season); + assert_eq!(model.season_number, ::flix_model::numbers::SeasonNumber::new($season)); assert_eq!(model.slug, concat!("SS Slug ", $id, ",", $season).to_string()); assert_eq!(model.library_id, LibraryId::from_raw($lid)); assert_eq!(model.directory, Path::new(concat!("SS Directory ", $id, ",", $season)).to_owned().into()); @@ -705,7 +705,7 @@ mod tests { (@insert, $db:expr, $id:literal, $season:literal, $lid:literal $(; $($skip:ident),+)?) => { super::seasons::ActiveModel { show_id: notsettable!(show_id, ShowId::from_raw($id) $(, $($skip),+)?), - season_number: notsettable!(season_number, $season $(, $($skip),+)?), + season_number: notsettable!(season_number, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), slug: notsettable!(slug, concat!("SS Slug ", $id, ",", $season).to_string() $(, $($skip),+)?), library_id: notsettable!(library_id, LibraryId::from_raw($lid) $(, $($skip),+)?), directory: notsettable!(directory, Path::new(concat!("SS Directory ", $id, ",", $season)).to_owned().into() $(, $($skip),+)?), @@ -745,8 +745,8 @@ mod tests { .expect("insert"); assert_eq!(model.show_id, ShowId::from_raw($id)); - assert_eq!(model.season_number, $season); - assert_eq!(model.episode_number, $episode); + assert_eq!(model.season_number, ::flix_model::numbers::SeasonNumber::new($season)); + assert_eq!(model.episode_number, ::flix_model::numbers::EpisodeNumber::new($episode)); assert_eq!(model.slug, concat!("SS Slug ", $id, ",", $season, $episode).to_string()); assert_eq!(model.library_id, LibraryId::from_raw($lid)); assert_eq!(model.directory, Path::new(concat!("SS Directory ", $id, ",", $season, $episode)).to_owned().into()); @@ -762,8 +762,8 @@ mod tests { (@insert, $db:expr, $id:literal, $season:literal, $episode:literal, $lid:literal $(; $($skip:ident),+)?) => { super::episodes::ActiveModel { show_id: notsettable!(show_id, ShowId::from_raw($id) $(, $($skip),+)?), - season_number: notsettable!(season_number, $season $(, $($skip),+)?), - episode_number: notsettable!(episode_number, $episode $(, $($skip),+)?), + season_number: notsettable!(season_number, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), + episode_number: notsettable!(episode_number, ::flix_model::numbers::EpisodeNumber::new($episode) $(, $($skip),+)?), count: notsettable!(count, 0 $(, $($skip),+)?), slug: notsettable!(slug, concat!("SS Slug ", $id, ",", $season, $episode).to_string() $(, $($skip),+)?), library_id: notsettable!(library_id, LibraryId::from_raw($lid) $(, $($skip),+)?), diff --git a/crates/db/src/entity/info.rs b/crates/db/src/entity/info.rs index 30471dd..433b89f 100644 --- a/crates/db/src/entity/info.rs +++ b/crates/db/src/entity/info.rs @@ -228,7 +228,7 @@ pub mod test { ($db:expr, $show:literal, $season:literal) => { $crate::entity::info::seasons::ActiveModel { show_id: Set(::flix_model::id::ShowId::from_raw($show)), - season_number: Set($season), + season_number: Set(::flix_model::numbers::SeasonNumber::new($season)), title: Set(::std::string::String::new()), overview: Set(::std::string::String::new()), date: Set(::chrono::NaiveDate::from_yo_opt(1, 1).expect("from_yo_opt")), @@ -244,8 +244,8 @@ pub mod test { ($db:expr, $show:literal, $season:literal, $episode:literal) => { $crate::entity::info::episodes::ActiveModel { show_id: Set(::flix_model::id::ShowId::from_raw($show)), - season_number: Set($season), - episode_number: Set($episode), + season_number: Set(::flix_model::numbers::SeasonNumber::new($season)), + episode_number: Set(::flix_model::numbers::EpisodeNumber::new($episode)), title: Set(::std::string::String::new()), overview: Set(::std::string::String::new()), date: Set(::chrono::NaiveDate::from_yo_opt(1, 1).expect("from_yo_opt")), @@ -422,7 +422,7 @@ mod tests { .expect("insert"); assert_eq!(model.show_id, ShowId::from_raw($show)); - assert_eq!(model.season_number, $season); + assert_eq!(model.season_number, ::flix_model::numbers::SeasonNumber::new($season)); assert_eq!(model.title, concat!("SS Title ", $show, ",", $season)); assert_eq!(model.overview, concat!("SS Overview ", $show, ",", $season)); assert_eq!(model.date, NaiveDate::from_yo_opt($show + $season, 1).expect("from_yo_opt")); @@ -439,7 +439,7 @@ mod tests { (@insert, $db:expr, $show:literal, $season:literal $(; $($skip:ident),+)?) => { super::seasons::ActiveModel { show_id: notsettable!(show_id, ShowId::from_raw($show) $(, $($skip),+)?), - season_number: notsettable!(season_number, $season $(, $($skip),+)?), + season_number: notsettable!(season_number, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), title: notsettable!(title, concat!("SS Title ", $show, ",", $season).to_string() $(, $($skip),+)?), overview: notsettable!(overview, concat!("SS Overview ", $show, ",", $season).to_string() $(, $($skip),+)?), date: notsettable!(date, NaiveDate::from_yo_opt($show + $season, 1).expect("from_yo_opt") $(, $($skip),+)?), @@ -473,8 +473,8 @@ mod tests { .expect("insert"); assert_eq!(model.show_id, ShowId::from_raw($show)); - assert_eq!(model.season_number, $season); - assert_eq!(model.episode_number, $episode); + assert_eq!(model.season_number, ::flix_model::numbers::SeasonNumber::new($season)); + assert_eq!(model.episode_number, ::flix_model::numbers::EpisodeNumber::new($episode)); assert_eq!(model.title, concat!("SSE Title ", $show, ",", $season, ",", $episode)); assert_eq!(model.overview, concat!("SSE Overview ", $show, ",", $season, ",", $episode)); assert_eq!(model.date, NaiveDate::from_yo_opt($show + $season, 1).expect("from_yo_opt")); @@ -491,8 +491,8 @@ mod tests { (@insert, $db:expr, $show:literal, $season:literal, $episode:literal $(; $($skip:ident),+)?) => { super::episodes::ActiveModel { show_id: notsettable!(show_id, ShowId::from_raw($show) $(, $($skip),+)?), - season_number: notsettable!(season_number, $season $(, $($skip),+)?), - episode_number: notsettable!(episode_number, $episode $(, $($skip),+)?), + season_number: notsettable!(season_number, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), + episode_number: notsettable!(episode_number, ::flix_model::numbers::EpisodeNumber::new($episode) $(, $($skip),+)?), title: notsettable!(title, concat!("SSE Title ", $show, ",", $season, ",", $episode).to_string() $(, $($skip),+)?), overview: notsettable!(overview, concat!("SSE Overview ", $show, ",", $season, ",", $episode).to_string() $(, $($skip),+)?), date: notsettable!(date, NaiveDate::from_yo_opt($show + $season, 1).expect("from_yo_opt") $(, $($skip),+)?), diff --git a/crates/db/src/entity/tmdb.rs b/crates/db/src/entity/tmdb.rs index 823244e..13eb927 100644 --- a/crates/db/src/entity/tmdb.rs +++ b/crates/db/src/entity/tmdb.rs @@ -280,9 +280,9 @@ pub mod test { ($db:expr, $show:literal, $season:literal, $flix_show:literal, $flix_season:literal) => { $crate::entity::tmdb::seasons::ActiveModel { tmdb_show: Set(::flix_tmdb::model::id::ShowId::from_raw($show)), - tmdb_season: Set($season), + tmdb_season: Set(::flix_model::numbers::SeasonNumber::new($season)), flix_show: Set(::flix_model::id::ShowId::from_raw($flix_show)), - flix_season: Set($flix_season), + flix_season: Set(::flix_model::numbers::SeasonNumber::new($flix_season)), last_update: Set(::chrono::Utc::now()), } .insert($db) @@ -296,11 +296,11 @@ pub mod test { ($db:expr, $show:literal, $season:literal, $episode:literal, $flix_show:literal, $flix_season:literal, $flix_episode:literal) => { $crate::entity::tmdb::episodes::ActiveModel { tmdb_show: Set(::flix_tmdb::model::id::ShowId::from_raw($show)), - tmdb_season: Set($season), - tmdb_episode: Set($episode), + tmdb_season: Set(::flix_model::numbers::SeasonNumber::new($season)), + tmdb_episode: Set(::flix_model::numbers::EpisodeNumber::new($episode)), flix_show: Set(::flix_model::id::ShowId::from_raw($flix_show)), - flix_season: Set($flix_season), - flix_episode: Set($flix_episode), + flix_season: Set(::flix_model::numbers::SeasonNumber::new($flix_season)), + flix_episode: Set(::flix_model::numbers::EpisodeNumber::new($flix_episode)), last_update: Set(::chrono::Utc::now()), runtime: Set(::core::default::Default::default()), } @@ -514,9 +514,9 @@ mod tests { .expect("insert"); assert_eq!(model.tmdb_show, TmdbShowId::from_raw($tshow)); - assert_eq!(model.tmdb_season, $tseason); + assert_eq!(model.tmdb_season, ::flix_model::numbers::SeasonNumber::new($tseason)); assert_eq!(model.flix_show, ShowId::from_raw($show)); - assert_eq!(model.flix_season, $season); + assert_eq!(model.flix_season, ::flix_model::numbers::SeasonNumber::new($season)); assert_eq!(model.last_update, NaiveDate::from_yo_opt($tshow, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc()); }; ($db:expr, $show:literal, $season:literal, $tshow:literal, $tseason:literal, $error:ident $(; $($skip:ident),+)?) => { @@ -531,9 +531,9 @@ mod tests { (@insert, $db:expr, $show:literal, $season:literal, $tshow:literal, $tseason:literal $(; $($skip:ident),+)?) => { super::seasons::ActiveModel { tmdb_show: notsettable!(tmdb_show, TmdbShowId::from_raw($tshow) $(, $($skip),+)?), - tmdb_season: notsettable!(tmdb_season, $tseason $(, $($skip),+)?), + tmdb_season: notsettable!(tmdb_season, ::flix_model::numbers::SeasonNumber::new($tseason) $(, $($skip),+)?), flix_show: notsettable!(flix_show, ShowId::from_raw($show) $(, $($skip),+)?), - flix_season: notsettable!(flix_season, $season $(, $($skip),+)?), + flix_season: notsettable!(flix_season, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), last_update: notsettable!(last_update, NaiveDate::from_yo_opt($tshow, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc() $(, $($skip),+)?), }.insert($db).await }; @@ -569,11 +569,11 @@ mod tests { .expect("insert"); assert_eq!(model.tmdb_show, TmdbShowId::from_raw($tshow)); - assert_eq!(model.tmdb_season, $tseason); - assert_eq!(model.tmdb_episode, $tepisode); + assert_eq!(model.tmdb_season, ::flix_model::numbers::SeasonNumber::new($tseason)); + assert_eq!(model.tmdb_episode, ::flix_model::numbers::EpisodeNumber::new($tepisode)); assert_eq!(model.flix_show, ShowId::from_raw($show)); - assert_eq!(model.flix_season, $season); - assert_eq!(model.flix_episode, $episode); + assert_eq!(model.flix_season, ::flix_model::numbers::SeasonNumber::new($season)); + assert_eq!(model.flix_episode, ::flix_model::numbers::EpisodeNumber::new($episode)); assert_eq!(model.last_update, NaiveDate::from_yo_opt($tshow, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc()); assert_eq!(model.runtime, Duration::from_secs($tshow).into()); }; @@ -589,11 +589,11 @@ mod tests { (@insert, $db:expr, $show:literal, $season:literal, $episode:literal, $tshow:literal, $tseason:literal, $tepisode:literal $(; $($skip:ident),+)?) => { super::episodes::ActiveModel { tmdb_show: notsettable!(tmdb_show, TmdbShowId::from_raw($tshow) $(, $($skip),+)?), - tmdb_season: notsettable!(tmdb_season, $tseason $(, $($skip),+)?), - tmdb_episode: notsettable!(tmdb_episode, $tepisode $(, $($skip),+)?), + tmdb_season: notsettable!(tmdb_season, ::flix_model::numbers::SeasonNumber::new($tseason) $(, $($skip),+)?), + tmdb_episode: notsettable!(tmdb_episode, ::flix_model::numbers::EpisodeNumber::new($tepisode) $(, $($skip),+)?), flix_show: notsettable!(flix_show, ShowId::from_raw($show) $(, $($skip),+)?), - flix_season: notsettable!(flix_season, $season $(, $($skip),+)?), - flix_episode: notsettable!(flix_episode, $episode $(, $($skip),+)?), + flix_season: notsettable!(flix_season, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), + flix_episode: notsettable!(flix_episode, ::flix_model::numbers::EpisodeNumber::new($episode) $(, $($skip),+)?), last_update: notsettable!(last_update, NaiveDate::from_yo_opt($tshow, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc() $(, $($skip),+)?), runtime: notsettable!(runtime, Duration::from_secs($tshow).into() $(, $($skip),+)?), }.insert($db).await diff --git a/crates/db/src/entity/watched.rs b/crates/db/src/entity/watched.rs index 0380386..f97dfc1 100644 --- a/crates/db/src/entity/watched.rs +++ b/crates/db/src/entity/watched.rs @@ -224,8 +224,8 @@ pub mod test { ($db:expr, $show:literal, $season:literal, $episode:literal, $user:literal) => { $crate::entity::watched::episodes::ActiveModel { show_id: Set(::flix_model::id::ShowId::from_raw($show)), - season_number: Set($season), - episode_number: Set($episode), + season_number: Set(::flix_model::numbers::SeasonNumber::new($season)), + episode_number: Set(::flix_model::numbers::EpisodeNumber::new($episode)), user_id: Set($user), watched_date: Set(::chrono::Utc::now()), } @@ -326,8 +326,8 @@ mod tests { .expect("insert"); assert_eq!(model.show_id, ShowId::from_raw($show)); - assert_eq!(model.season_number, $season); - assert_eq!(model.episode_number, $episode); + assert_eq!(model.season_number, ::flix_model::numbers::SeasonNumber::new($season)); + assert_eq!(model.episode_number, ::flix_model::numbers::EpisodeNumber::new($episode)); assert_eq!(model.user_id, $uid); assert_eq!(model.watched_date, NaiveDate::from_yo_opt($uid, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc()); }; @@ -340,8 +340,8 @@ mod tests { (@insert, $db:expr, $show:literal, $season:literal, $episode:literal, $uid:literal $(; $($skip:ident),+)?) => { super::episodes::ActiveModel { show_id: notsettable!(show_id, ShowId::from_raw($show) $(, $($skip),+)?), - season_number: notsettable!(season_number, $season $(, $($skip),+)?), - episode_number: notsettable!(episode_number, $episode $(, $($skip),+)?), + season_number: notsettable!(season_number, ::flix_model::numbers::SeasonNumber::new($season) $(, $($skip),+)?), + episode_number: notsettable!(episode_number, ::flix_model::numbers::EpisodeNumber::new($episode) $(, $($skip),+)?), user_id: notsettable!(user_id, $uid $(, $($skip),+)?), watched_date: notsettable!(watched_date, NaiveDate::from_yo_opt($uid, 1).expect("from_yo_opt").and_hms_opt(0, 0, 0).expect("and_hms_opt").and_utc() $(, $($skip),+)?), }.insert($db).await diff --git a/crates/flix/Cargo.toml b/crates/flix/Cargo.toml index 74f3642..dd40bf8 100644 --- a/crates/flix/Cargo.toml +++ b/crates/flix/Cargo.toml @@ -1,22 +1,22 @@ [package] name = "flix" -version = "0.0.15" - -categories = [] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "Mechanisms for interacting with flix media" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = [] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lints] -workspace = true +[dependencies] +flix-db = { workspace = true } +flix-fs = { workspace = true, optional = true } +flix-model = { workspace = true } +flix-tmdb = { workspace = true, optional = true } [features] default = [] @@ -24,9 +24,5 @@ fs = ["dep:flix-fs"] serde = ["flix-model/serde"] tmdb = ["dep:flix-tmdb", "flix-db/tmdb"] -[dependencies] -flix-db = { workspace = true } -flix-model = { workspace = true } - -flix-fs = { workspace = true, optional = true } -flix-tmdb = { workspace = true, optional = true } +[lints] +workspace = true diff --git a/crates/fs/Cargo.toml b/crates/fs/Cargo.toml index 438a31f..82f2f3e 100644 --- a/crates/fs/Cargo.toml +++ b/crates/fs/Cargo.toml @@ -1,28 +1,24 @@ [package] name = "flix-fs" -version = "0.0.15" - -categories = [] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "Filesystem scanner for flix media" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = [] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lints] -workspace = true - [dependencies] -flix-model = { workspace = true } - async-stream = { workspace = true } -regex = { workspace = true, features = ["std", "perf"] } +flix-model = { workspace = true } +regex = { workspace = true, features = ["perf", "std"] } thiserror = { workspace = true } tokio = { workspace = true } tokio-stream = { workspace = true, features = ["fs"] } + +[lints] +workspace = true diff --git a/crates/model/Cargo.toml b/crates/model/Cargo.toml index ac21e22..1651b4d 100644 --- a/crates/model/Cargo.toml +++ b/crates/model/Cargo.toml @@ -1,29 +1,25 @@ [package] name = "flix-model" -version = "0.0.15" - -categories = [] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "Core types for flix data" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = [] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lints] -workspace = true +[dependencies] +seamantic = { workspace = true } +serde = { workspace = true, features = ["derive", "std"], optional = true } +thiserror = { workspace = true } [features] default = [] serde = ["dep:serde"] -[dependencies] -seamantic = { workspace = true } - -serde = { workspace = true, optional = true, features = ["std", "derive"] } -thiserror = { workspace = true } +[lints] +workspace = true diff --git a/crates/model/src/numbers.rs b/crates/model/src/numbers.rs index e9e6163..b2942ef 100644 --- a/crates/model/src/numbers.rs +++ b/crates/model/src/numbers.rs @@ -1,12 +1,76 @@ //! This module contains season and episode numbers and related errors +use core::fmt; use core::ops::RangeInclusive; +use core::str::FromStr; use std::collections::HashSet; -/// Type alias for representing season numbers -pub type SeasonNumber = u32; -/// Type alias for representing episode numbers -pub type EpisodeNumber = u32; +use seamantic::sea_orm; + +/// Newtype for representing season numbers +#[derive( + Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, sea_orm::DeriveValueType, +)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "serde", serde(transparent))] +#[repr(transparent)] +pub struct SeasonNumber(u32); + +impl SeasonNumber { + /// Create a `SeasonNumber` from an integer + pub fn new(value: u32) -> Self { + Self(value) + } +} + +impl fmt::Display for SeasonNumber { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} + +impl FromStr for SeasonNumber { + type Err = ::Err; + + fn from_str(s: &str) -> Result { + u32::from_str(s).map(Self) + } +} + +/// Newtype for representing episode numbers +#[derive( + Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, sea_orm::DeriveValueType, +)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "serde", serde(transparent))] +#[repr(transparent)] +pub struct EpisodeNumber(u32); + +impl EpisodeNumber { + /// Create an `EpisodeNumber` from an integer + pub fn new(value: u32) -> Self { + Self(value) + } + + /// Get the underlying value + pub fn into_inner(self) -> u32 { + self.0 + } +} + +impl fmt::Display for EpisodeNumber { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} + +impl FromStr for EpisodeNumber { + type Err = ::Err; + + fn from_str(s: &str) -> Result { + u32::from_str(s).map(Self) + } +} /// Potential errors when building EpisodeNumbers #[derive(Debug, thiserror::Error)] @@ -37,7 +101,7 @@ impl TryFrom<&[EpisodeNumber]> for EpisodeNumbers { let max = value.iter().copied().max().unwrap_or_default(); let len = value.len(); - if usize::try_from(max.saturating_sub(min).saturating_add(1)) != Ok(len) { + if usize::try_from(max.0.saturating_sub(min.0).saturating_add(1)) != Ok(len) { return Err(Error::Noncontiguous); } @@ -56,7 +120,7 @@ impl EpisodeNumbers { /// Create an [EpisodeNumbers] from a starting number and a count. /// `count` should be zero for single episodes. pub fn new(start: EpisodeNumber, count: u8) -> Self { - Self(start..=start.saturating_add(count.into())) + Self(start..=EpisodeNumber(start.0.saturating_add(count.into()))) } /// Get the range of episodes diff --git a/crates/tmdb/Cargo.toml b/crates/tmdb/Cargo.toml index 44b1edd..758be88 100644 --- a/crates/tmdb/Cargo.toml +++ b/crates/tmdb/Cargo.toml @@ -1,40 +1,35 @@ [package] name = "flix-tmdb" -version = "0.0.15" - -categories = [] +version = "0.0.16" +edition.workspace = true +rust-version.workspace = true description = "Clients and models for fetching data from TMDB" repository = "https://github.com/QuantumShade/flix" - -authors.workspace = true -edition.workspace = true license-file.workspace = true -rust-version.workspace = true +categories = [] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lints] -workspace = true - -[features] -default = [] -sea-orm = ["dep:sea-orm"] - [dependencies] -flix-model = { workspace = true } - chrono = { workspace = true, features = ["serde"] } -governor = { workspace = true, features = ["std", "jitter"] } +flix-model = { workspace = true, features = ["serde"] } +governor = { workspace = true, features = ["jitter", "std"] } nonzero_ext = { workspace = true } -reqwest = { workspace = true, features = ["json", "rustls-tls"] } +reqwest = { workspace = true, features = ["json", "query", "rustls"] } +sea-orm = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } thiserror = { workspace = true } url = { workspace = true } url-macro = { workspace = true } -sea-orm = { workspace = true, optional = true } - [dev-dependencies] serde_test = { workspace = true } + +[features] +default = [] +sea-orm = ["dep:sea-orm"] + +[lints] +workspace = true diff --git a/tombi.toml b/tombi.toml new file mode 100644 index 0000000..6ee615f --- /dev/null +++ b/tombi.toml @@ -0,0 +1,5 @@ +toml-version = "v1.0.0" + +[format.rules] +indent-style = "tab" +indent-width = 4