From 502dc6f77d1763c2b3b7b668fc8aee79a9888ed2 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Mon, 16 Sep 2024 22:49:28 +0200 Subject: [PATCH 01/12] feat: migrate utils::config from anyhow to thiserror and handle a "single config init" mechanism --- Cargo.lock | 1 + crates/sesam-vitale/src/ssvlib_demo.rs | 6 ++--- crates/utils/Cargo.toml | 1 + crates/utils/src/config.rs | 36 ++++++++++++++++++++------ 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 39b5b13..d7ae3a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5046,6 +5046,7 @@ dependencies = [ "anyhow", "directories", "dotenv", + "thiserror", ] [[package]] diff --git a/crates/sesam-vitale/src/ssvlib_demo.rs b/crates/sesam-vitale/src/ssvlib_demo.rs index 2a29ce5..d5ad4a0 100644 --- a/crates/sesam-vitale/src/ssvlib_demo.rs +++ b/crates/sesam-vitale/src/ssvlib_demo.rs @@ -9,7 +9,7 @@ use thiserror::Error; use crate::cps::lire_carte; use crate::libssv::{SSV_InitLIB2, SSV_LireConfig}; -use ::utils::config::load_config; +use ::utils::config::{load_config, ConfigError}; #[derive(Error, Debug)] pub enum SSVDemoError { @@ -18,7 +18,7 @@ pub enum SSVDemoError { #[error(transparent)] SSVLibErrorCode(#[from] crate::libssv::LibSSVError), #[error(transparent)] - Anyhow(#[from] anyhow::Error), + Configuration(#[from] ConfigError), } fn ssv_init_lib_2() -> Result<(), SSVDemoError> { @@ -71,7 +71,7 @@ pub fn demo() -> Result<(), SSVDemoError> { println!("------- Demo for the SSV library --------"); - load_config()?; + load_config(None)?; ssv_init_lib_2()?; diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index fbe8c0e..d89f083 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" anyhow = "1.0" directories = "5.0" dotenv = "0.15" +thiserror = "1.0" diff --git a/crates/utils/src/config.rs b/crates/utils/src/config.rs index d4756f5..d704e7b 100644 --- a/crates/utils/src/config.rs +++ b/crates/utils/src/config.rs @@ -1,11 +1,23 @@ -use std::{env, path::PathBuf}; +use std::{env, path::PathBuf, sync::atomic::AtomicBool}; -use anyhow::{bail, Context, Result}; use directories::ProjectDirs; use dotenv::from_path; +use thiserror::Error; const CONFIG_FILE_NAME: &str = ".env"; +static CONFIG_INITIALIZED: AtomicBool = AtomicBool::new(false); + +#[derive(Debug, Error)] +pub enum ConfigError { + #[error("No config file {0} found in the following directories: {1:#?}")] + ConfigFileNotFound(String, Vec), + #[error("Failed to load config file: {0}")] + LoadConfigError(#[from] dotenv::Error), + #[error("Environment variable error: {0}")] + EnvVarError(#[from] std::env::VarError), +} + pub fn get_config_dirs() -> Vec { let mut config_dirs = vec![ PathBuf::from(""), // Current directory @@ -19,7 +31,7 @@ pub fn get_config_dirs() -> Vec { config_dirs } -pub fn get_config_files() -> Result> { +pub fn get_config_files() -> Result, ConfigError> { let config_dirs = get_config_dirs(); let mut config_files = Vec::new(); for config_dir in config_dirs.iter() { @@ -29,14 +41,20 @@ pub fn get_config_files() -> Result> { } } if config_files.is_empty() { - bail!( - "No config file {CONFIG_FILE_NAME} found in the following directories: {config_dirs:#?}" - ); + return Err(ConfigError::ConfigFileNotFound( + CONFIG_FILE_NAME.to_string(), + config_dirs, + )); } Ok(config_files) } -pub fn load_config() -> Result<()> { +pub fn load_config(force: Option) -> Result<(), ConfigError> { + let force = force.unwrap_or(false); + if CONFIG_INITIALIZED.load(std::sync::atomic::Ordering::Relaxed) && force { + println!("DEBUG: Config already initialized, skipping"); + return Ok(()); + } let config_files = get_config_files()?; // Load the first config file found // TODO: add a verbose log to list all config files found @@ -44,5 +62,7 @@ pub fn load_config() -> Result<()> { "DEBUG: Config files found (1st loaded): {:#?}", config_files ); - from_path(config_files[0].as_path()).context("Failed to load config file") + from_path(config_files[0].as_path()).map_err(ConfigError::LoadConfigError)?; + CONFIG_INITIALIZED.store(true, std::sync::atomic::Ordering::Relaxed); + Ok(()) } From 2ef527fa647edaa5cb57ada68bb57033728fb001 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Mon, 16 Sep 2024 22:54:02 +0200 Subject: [PATCH 02/12] feat: add a function to init properly app library --- crates/app/Cargo.toml | 2 ++ crates/app/src/lib.rs | 17 +++++++++++++++++ crates/app/src/main.rs | 6 +++++- crates/backend/Cargo.toml | 3 +++ crates/backend/src/lib.rs | 14 ++++++++++++++ crates/backend/src/main.rs | 30 ++++++++++++++++++++++-------- 6 files changed, 63 insertions(+), 9 deletions(-) diff --git a/crates/app/Cargo.toml b/crates/app/Cargo.toml index 175b803..73aa4ff 100644 --- a/crates/app/Cargo.toml +++ b/crates/app/Cargo.toml @@ -16,6 +16,8 @@ tokio = { version = "1.39.1", features = ["macros", "rt-multi-thread"] } tower-http = { version = "0.5.2", features = ["fs"] } tower-livereload = "0.9.3" +utils = { path = "../utils" } + [dev-dependencies] cargo-watch = "8.5.1" systemfd = "0.4.0" diff --git a/crates/app/src/lib.rs b/crates/app/src/lib.rs index 818e6ea..d7daf4c 100644 --- a/crates/app/src/lib.rs +++ b/crates/app/src/lib.rs @@ -2,8 +2,13 @@ use std::path::PathBuf; use axum::http::{StatusCode, Uri}; use axum_htmx::AutoVaryLayer; +use thiserror::Error; use tower_http::services::ServeDir; +use ::utils::config::{load_config, ConfigError}; + +pub mod db; + mod menu; mod pages; @@ -11,6 +16,18 @@ async fn fallback(uri: Uri) -> (StatusCode, String) { (StatusCode::NOT_FOUND, format!("No route for {uri}")) } +#[derive(Error, Debug)] +pub enum InitError { + #[error(transparent)] + ConfigError(#[from] ConfigError), +} + +pub fn init() -> Result<(), InitError> { + load_config(None)?; + Ok(()) +} + + pub async fn get_router(assets_path: PathBuf) -> axum::Router<()> { axum::Router::new() .nest_service("/assets", ServeDir::new(assets_path)) diff --git a/crates/app/src/main.rs b/crates/app/src/main.rs index ea1bc46..e60819d 100644 --- a/crates/app/src/main.rs +++ b/crates/app/src/main.rs @@ -10,7 +10,7 @@ use tokio::net::TcpListener; use tower_livereload::predicate::Predicate; use tower_livereload::LiveReloadLayer; -use ::app::get_router; +use ::app::{get_router, init, InitError}; #[derive(Error, Debug)] pub enum AppError { @@ -20,6 +20,8 @@ pub enum AppError { NotifyWatcher(#[from] notify::Error), #[error("Missing environment variable {var}")] MissingEnvVar { var: &'static str }, + #[error("Error while initialising the app")] + Initialisation(#[from] InitError), } /// Nous filtrons les requêtes de `htmx` pour ne pas inclure le script _JS_ qui gère le rechargement @@ -61,6 +63,8 @@ fn get_livereload_layer( #[tokio::main] async fn main() -> Result<(), AppError> { + init()?; + let manifest_dir = env::var("CARGO_MANIFEST_DIR").map_err(|_| AppError::MissingEnvVar { var: "CARGO_MANIFEST_DIR", })?; diff --git a/crates/backend/Cargo.toml b/crates/backend/Cargo.toml index 8dc8c07..b2fffd0 100644 --- a/crates/backend/Cargo.toml +++ b/crates/backend/Cargo.toml @@ -7,8 +7,11 @@ edition = "2021" anyhow = "1.0.89" axum = "0.7.6" listenfd = "1.0.1" +thiserror.workspace = true tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] } +utils = { path = "../utils" } + [dev-dependencies] cargo-watch = "8.5.2" systemfd = "0.4.3" diff --git a/crates/backend/src/lib.rs b/crates/backend/src/lib.rs index 530b3dd..72ee327 100644 --- a/crates/backend/src/lib.rs +++ b/crates/backend/src/lib.rs @@ -2,6 +2,20 @@ use anyhow::Error as AnyError; use axum::http::{StatusCode, Uri}; use axum::response::{IntoResponse, Response}; use axum::{routing::get, Router}; +use thiserror::Error; + +use ::utils::config::{load_config, ConfigError}; + +#[derive(Error, Debug)] +pub enum InitError { + #[error(transparent)] + ConfigError(#[from] ConfigError), +} + +pub fn init() -> Result<(), InitError> { + load_config(None)?; + Ok(()) +} pub fn get_router() -> Router { Router::new() diff --git a/crates/backend/src/main.rs b/crates/backend/src/main.rs index 9ca9dda..e9a489f 100644 --- a/crates/backend/src/main.rs +++ b/crates/backend/src/main.rs @@ -1,24 +1,38 @@ use listenfd::ListenFd; +use thiserror::Error; use tokio::net::TcpListener; -use backend::get_router; +use backend::{get_router, init, InitError}; + +#[derive(Error, Debug)] +pub enum BackendError { + #[error("Error while setting up or serving the TCP listener")] + ServeTCPListener(#[from] std::io::Error), + #[error("Error while initialising the backend")] + InitError(#[from] InitError), +} #[tokio::main] -async fn main() { +async fn main() -> Result<(), BackendError> { + init()?; + let app = get_router(); let mut listenfd = ListenFd::from_env(); - let listener = match listenfd.take_tcp_listener(0).unwrap() { + let listener = match listenfd.take_tcp_listener(0)? { // if we are given a tcp listener on listen fd 0, we use that one Some(listener) => { - listener.set_nonblocking(true).unwrap(); - TcpListener::from_std(listener).unwrap() + listener.set_nonblocking(true)?; + TcpListener::from_std(listener)? } // otherwise fall back to local listening - None => TcpListener::bind("0.0.0.0:8080").await.unwrap(), + None => TcpListener::bind("0.0.0.0:8080").await?, }; - println!("Listening on {}", listener.local_addr().unwrap()); - axum::serve(listener, app).await.unwrap(); + let local_addr = listener.local_addr()?; + println!("Listening on {}", local_addr); + axum::serve(listener, app).await?; + + Ok(()) } From d43ee1c28f9ba9942d8cd04fba509296e77f18ea Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Mon, 16 Sep 2024 22:57:16 +0200 Subject: [PATCH 03/12] feat: setup seaorm and a first "debug" entity as example --- .env.linux.example | 1 + .env.win.example | 1 + .gitignore | 3 ++ Cargo.toml | 2 + README.md | 40 ++++++++++++++++++ crates/app/Cargo.toml | 9 ++++ crates/app/README.md | 9 ++++ crates/app/src/db.rs | 11 +++++ crates/app/src/lib.rs | 9 ++++ crates/app/src/main.rs | 2 + entity/Cargo.toml | 11 +++++ entity/src/entities/debug.rs | 17 ++++++++ entity/src/entities/mod.rs | 5 +++ entity/src/entities/prelude.rs | 3 ++ entity/src/lib.rs | 2 + migration/Cargo.toml | 21 ++++++++++ migration/README.md | 41 +++++++++++++++++++ migration/src/lib.rs | 12 ++++++ .../m20220101_000001_create_debug_table.rs | 35 ++++++++++++++++ migration/src/main.rs | 6 +++ 20 files changed, 240 insertions(+) create mode 100644 crates/app/src/db.rs create mode 100644 entity/Cargo.toml create mode 100644 entity/src/entities/debug.rs create mode 100644 entity/src/entities/mod.rs create mode 100644 entity/src/entities/prelude.rs create mode 100644 entity/src/lib.rs create mode 100644 migration/Cargo.toml create mode 100644 migration/README.md create mode 100644 migration/src/lib.rs create mode 100644 migration/src/m20220101_000001_create_debug_table.rs create mode 100644 migration/src/main.rs diff --git a/.env.linux.example b/.env.linux.example index c8d84aa..a4a56f4 100644 --- a/.env.linux.example +++ b/.env.linux.example @@ -1,2 +1,3 @@ SESAM_FSV_VERSION=1.40.13 SESAM_INI_PATH=/etc/opt/santesocial/fsv/${SESAM_FSV_VERSION}/conf/sesam.ini +DATABASE_URL=sqlite://p4pillon.sqlite?mode=rwc diff --git a/.env.win.example b/.env.win.example index bcd5177..68e50d8 100644 --- a/.env.win.example +++ b/.env.win.example @@ -1,2 +1,3 @@ SESAM_FSV_VERSION=1.40.13 SESAM_INI_PATH=${ALLUSERSPROFILE}\\santesocial\\fsv\\${SESAM_FSV_VERSION}\\conf\\sesam.ini +DATABASE_URL=sqlite://p4pillon.sqlite?mode=rwc diff --git a/.gitignore b/.gitignore index e238176..6ab57e3 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ target/ # Ignore .env files .env + +# Development Database +*.sqlite diff --git a/Cargo.toml b/Cargo.toml index a4ff5d4..f041158 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,6 @@ members = [ "crates/desktop", "crates/sesam-vitale", "crates/utils", + "migration", + "entity", ] diff --git a/README.md b/README.md index eb2ad78..05d7aec 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,24 @@ La CLI Tauri est nécessaire au lancement du client `desktop`. Elle peut être i cargo install tauri-cli --version "^2.0.0-rc" ``` +#### SeaORM CLI + +SeaORM est notre ORM. Le CLI SeaORM est nécessaire pour la génération des modèles de la base de données et des migrations associées. Elle peut être installée via Cargo : + +```bash +cargo install sea-orm-cli +``` + +L'applicatif va chercher les informations de connexion à la base de données dans la variable `DATABASE_URL` importée depuis les [fichiers de configuration](#fichiers-de-configuration). + +```.env +DATABASE_URL=sqlite://p4pillon.sqlite?mode=rwc +``` + +Toutefois, l'usage de la CLI de SeaORM nécessite de renseigner les informations de connexion à la base de données dans un fichier `.env` situé à la racine du projet. + +> Astuce : utilisé un lien symbolique pour éviter de dupliquer le fichier `.env`. + #### SESAM-Vitale La crate `sesam-vitale` nécessite la présence des librairies dynamiques fournies par le package FSV et la CryptolibCPS. Les instructions d'installation sont disponibles dans le [README](crates/sesam-vitale/README.md) de la crate `sesam-vitale`. @@ -75,3 +93,25 @@ Pour packager le client `desktop`, il est nécessaire de faire appel à la CLI T ```bash cargo tauri build ``` + +## Gestion de la base de données + +### Création d'une migration + +```bash +sea-orm-cli migrate generate +``` + +Cette commande génère un fichier de migration à adapter dans le dossier `migration/src`. + +### Appliquer les migrations + +```bash +sea-orm-cli migrate up +``` + +### Génération des entitées + +```bash +sea-orm-cli generate entity -o entity/src/entities +``` \ No newline at end of file diff --git a/crates/app/Cargo.toml b/crates/app/Cargo.toml index 73aa4ff..3d07cd0 100644 --- a/crates/app/Cargo.toml +++ b/crates/app/Cargo.toml @@ -8,14 +8,23 @@ askama = "0.12.1" askama_axum = "0.4.0" axum = "0.7.5" axum-htmx = { version = "0.6", features = ["auto-vary"] } +futures = "0.3.30" listenfd = "1.0.1" notify = "6.1.1" +sea-orm = { version = "1.0.1", features = [ + # Same as in the migration crate + "sqlx-sqlite", + "runtime-tokio-rustls", + "macros", +] } serde = { version = "1.0.204", features = ["derive"] } thiserror = "1.0.63" tokio = { version = "1.39.1", features = ["macros", "rt-multi-thread"] } tower-http = { version = "0.5.2", features = ["fs"] } tower-livereload = "0.9.3" +entity = { path = "../../entity" } +migration = { path = "../../migration" } utils = { path = "../utils" } [dev-dependencies] diff --git a/crates/app/README.md b/crates/app/README.md index f793935..3c5cf9b 100644 --- a/crates/app/README.md +++ b/crates/app/README.md @@ -2,6 +2,15 @@ - Récupérer le binaire TailwindCSS : https://tailwindcss.com/blog/standalone-cli +## Configuration + +> Astuce : lorsqu'on exécute directement la crate `App` à des fins de développement, le système de configuration n'utilisera pas l'éventuel fichier `.env` situé à la racine du workspace Rust. Pour éviter de dupliquer le fichier `.env`, il est possible de créer un lien symbolique vers le fichier `.env` de la crate `App` : + +```bash +cd crates/app +ln -s ../../.env .env +``` + ## Exécution - Lancer tailwindcss en mode watch dans un terminal : diff --git a/crates/app/src/db.rs b/crates/app/src/db.rs new file mode 100644 index 0000000..a50eb76 --- /dev/null +++ b/crates/app/src/db.rs @@ -0,0 +1,11 @@ +use migration::{Migrator, MigratorTrait}; +use sea_orm::{Database, DatabaseConnection, DbErr}; +use std::env; + +pub async fn get_connection() -> Result { + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + + let db_connection = Database::connect(database_url).await?; + Migrator::up(&db_connection, None).await?; + Ok(db_connection) +} diff --git a/crates/app/src/lib.rs b/crates/app/src/lib.rs index d7daf4c..a04e6ea 100644 --- a/crates/app/src/lib.rs +++ b/crates/app/src/lib.rs @@ -2,6 +2,7 @@ use std::path::PathBuf; use axum::http::{StatusCode, Uri}; use axum_htmx::AutoVaryLayer; +use sea_orm::DatabaseConnection; use thiserror::Error; use tower_http::services::ServeDir; @@ -27,12 +28,20 @@ pub fn init() -> Result<(), InitError> { Ok(()) } +#[derive(Clone)] +pub struct AppState { + db_connection: DatabaseConnection, +} pub async fn get_router(assets_path: PathBuf) -> axum::Router<()> { + let db_connection = db::get_connection().await.unwrap(); + let state: AppState = AppState { db_connection }; + axum::Router::new() .nest_service("/assets", ServeDir::new(assets_path)) .merge(pages::get_routes()) .fallback(fallback) + .with_state(state) // The AutoVaryLayer is used to avoid cache issues with htmx (cf: https://github.com/robertwayne/axum-htmx?tab=readme-ov-file#auto-caching-management) .layer(AutoVaryLayer) } diff --git a/crates/app/src/main.rs b/crates/app/src/main.rs index e60819d..e7ddc98 100644 --- a/crates/app/src/main.rs +++ b/crates/app/src/main.rs @@ -20,6 +20,8 @@ pub enum AppError { NotifyWatcher(#[from] notify::Error), #[error("Missing environment variable {var}")] MissingEnvVar { var: &'static str }, + #[error("Error with the database connection")] + DatabaseConnection(#[from] sea_orm::DbErr), #[error("Error while initialising the app")] Initialisation(#[from] InitError), } diff --git a/entity/Cargo.toml b/entity/Cargo.toml new file mode 100644 index 0000000..d7ae904 --- /dev/null +++ b/entity/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "entity" +version = "0.1.0" +edition = "2021" + +[lib] +name = "entity" +path = "src/lib.rs" + +[dependencies] +sea-orm = { version = "1.0.1" } diff --git a/entity/src/entities/debug.rs b/entity/src/entities/debug.rs new file mode 100644 index 0000000..0a0b0a9 --- /dev/null +++ b/entity/src/entities/debug.rs @@ -0,0 +1,17 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.1 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[sea_orm(table_name = "debug")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub title: String, + pub text: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/entity/src/entities/mod.rs b/entity/src/entities/mod.rs new file mode 100644 index 0000000..e774aad --- /dev/null +++ b/entity/src/entities/mod.rs @@ -0,0 +1,5 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.1 + +pub mod prelude; + +pub mod debug; diff --git a/entity/src/entities/prelude.rs b/entity/src/entities/prelude.rs new file mode 100644 index 0000000..bd169f7 --- /dev/null +++ b/entity/src/entities/prelude.rs @@ -0,0 +1,3 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.1 + +pub use super::debug::Entity as Debug; diff --git a/entity/src/lib.rs b/entity/src/lib.rs new file mode 100644 index 0000000..21c129f --- /dev/null +++ b/entity/src/lib.rs @@ -0,0 +1,2 @@ +mod entities; +pub use entities::*; diff --git a/migration/Cargo.toml b/migration/Cargo.toml new file mode 100644 index 0000000..6b190a4 --- /dev/null +++ b/migration/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "migration" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "migration" +path = "src/lib.rs" + +[dependencies] +async-std = { version = "1", features = ["attributes", "tokio1"] } + +[dependencies.sea-orm-migration] +version = "1.0.0" +features = [ + # `ASYNC_RUNTIME` and `DATABASE_DRIVER` are required to run migration using the cli + # They must be the same as the features in the `sea-orm` dependency in the `app` crate + "sqlx-sqlite", # `DATABASE_DRIVER` feature + "runtime-tokio-rustls", # `ASYNC_RUNTIME` feature +] diff --git a/migration/README.md b/migration/README.md new file mode 100644 index 0000000..3b438d8 --- /dev/null +++ b/migration/README.md @@ -0,0 +1,41 @@ +# Running Migrator CLI + +- Generate a new migration file + ```sh + cargo run -- generate MIGRATION_NAME + ``` +- Apply all pending migrations + ```sh + cargo run + ``` + ```sh + cargo run -- up + ``` +- Apply first 10 pending migrations + ```sh + cargo run -- up -n 10 + ``` +- Rollback last applied migrations + ```sh + cargo run -- down + ``` +- Rollback last 10 applied migrations + ```sh + cargo run -- down -n 10 + ``` +- Drop all tables from the database, then reapply all migrations + ```sh + cargo run -- fresh + ``` +- Rollback all applied migrations, then reapply all migrations + ```sh + cargo run -- refresh + ``` +- Rollback all applied migrations + ```sh + cargo run -- reset + ``` +- Check the status of all migrations + ```sh + cargo run -- status + ``` diff --git a/migration/src/lib.rs b/migration/src/lib.rs new file mode 100644 index 0000000..3f7859c --- /dev/null +++ b/migration/src/lib.rs @@ -0,0 +1,12 @@ +pub use sea_orm_migration::prelude::*; + +mod m20220101_000001_create_debug_table; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![Box::new(m20220101_000001_create_debug_table::Migration)] + } +} diff --git a/migration/src/m20220101_000001_create_debug_table.rs b/migration/src/m20220101_000001_create_debug_table.rs new file mode 100644 index 0000000..f5f185c --- /dev/null +++ b/migration/src/m20220101_000001_create_debug_table.rs @@ -0,0 +1,35 @@ +use sea_orm_migration::{prelude::*, schema::*}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(Debug::Table) + .if_not_exists() + .col(pk_auto(Debug::Id)) + .col(string(Debug::Title)) + .col(string(Debug::Text)) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Debug::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +enum Debug { + Table, + Id, + Title, + Text, +} diff --git a/migration/src/main.rs b/migration/src/main.rs new file mode 100644 index 0000000..c6b6e48 --- /dev/null +++ b/migration/src/main.rs @@ -0,0 +1,6 @@ +use sea_orm_migration::prelude::*; + +#[async_std::main] +async fn main() { + cli::run_cli(migration::Migrator).await; +} From 0d51e3aa682f038ba3442944beb6ce1f53dae18d Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Mon, 16 Sep 2024 22:58:41 +0200 Subject: [PATCH 04/12] feat: add a DEBUG page to the UI with a database usage example --- crates/app/assets/css/style.css | 142 ++++++++++++++++++++++++++++++++ crates/app/src/menu.rs | 5 ++ crates/app/src/pages/debug.html | 72 ++++++++++++++++ crates/app/src/pages/debug.rs | 48 +++++++++++ crates/app/src/pages/mod.rs | 6 +- 5 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 crates/app/src/pages/debug.html create mode 100644 crates/app/src/pages/debug.rs diff --git a/crates/app/assets/css/style.css b/crates/app/assets/css/style.css index d3db34e..e2769fc 100644 --- a/crates/app/assets/css/style.css +++ b/crates/app/assets/css/style.css @@ -580,6 +580,10 @@ video { margin-bottom: 1rem; } +.mb-1 { + margin-bottom: 0.25rem; +} + .mb-2 { margin-bottom: 0.5rem; } @@ -604,6 +608,10 @@ video { margin-top: 1rem; } +.mb-5 { + margin-bottom: 1.25rem; +} + .block { display: block; } @@ -616,6 +624,10 @@ video { display: inline-flex; } +.table { + display: table; +} + .grid { display: grid; } @@ -696,6 +708,10 @@ video { width: 100%; } +.max-w-3xl { + max-width: 48rem; +} + .max-w-7xl { max-width: 80rem; } @@ -756,6 +772,12 @@ video { margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); } +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} + .divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); @@ -801,6 +823,10 @@ video { border-width: 2px; } +.border-b { + border-bottom-width: 1px; +} + .border-dashed { border-style: dashed; } @@ -850,6 +876,11 @@ video { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } +.bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); +} + .p-2 { padding: 0.5rem; } @@ -858,6 +889,10 @@ video { padding: 1rem; } +.p-6 { + padding: 1.5rem; +} + .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; @@ -868,26 +903,59 @@ video { padding-right: 1rem; } +.px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + .py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; } +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} + .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } +.py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} + .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + .py-8 { padding-top: 2rem; padding-bottom: 2rem; } +.text-left { + text-align: left; +} + +.text-center { + text-align: center; +} + .text-2xl { font-size: 1.5rem; line-height: 2rem; @@ -908,10 +976,24 @@ video { line-height: 1.25rem; } +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + .font-bold { font-weight: 700; } +.font-light { + font-weight: 300; +} + .font-medium { font-weight: 500; } @@ -920,6 +1002,10 @@ video { font-weight: 600; } +.uppercase { + text-transform: uppercase; +} + .leading-tight { line-height: 1.25; } @@ -964,6 +1050,11 @@ video { background-color: rgb(243 244 246 / var(--tw-bg-opacity)); } +.hover\:bg-blue-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity)); +} + .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; @@ -991,11 +1082,24 @@ video { --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)); } +.focus\:ring-blue-300:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)); +} + @media (min-width: 640px) { + .sm\:max-w-md { + max-width: 28rem; + } + .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .sm\:p-8 { + padding: 2rem; + } + .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; @@ -1051,6 +1155,12 @@ video { margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); } + .md\:space-y-5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); + } + .md\:border-0 { border-width: 0px; } @@ -1072,6 +1182,11 @@ video { padding: 1.5rem; } + .md\:text-2xl { + font-size: 1.5rem; + line-height: 2rem; + } + .md\:text-blue-700 { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity)); @@ -1088,6 +1203,10 @@ video { } @media (min-width: 1024px) { + .lg\:mt-5 { + margin-top: 1.25rem; + } + .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } @@ -1102,12 +1221,20 @@ video { --tw-space-x-reverse: 1; } +.rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) { + text-align: right; +} + @media (prefers-color-scheme: dark) { .dark\:divide-gray-600 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(75 85 99 / var(--tw-divide-opacity)); } + .dark\:border { + border-width: 1px; + } + .dark\:border-gray-600 { --tw-border-opacity: 1; border-color: rgb(75 85 99 / var(--tw-border-opacity)); @@ -1133,6 +1260,11 @@ video { background-color: rgb(17 24 39 / var(--tw-bg-opacity)); } + .dark\:bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); + } + .dark\:text-gray-200 { --tw-text-opacity: 1; color: rgb(229 231 235 / var(--tw-text-opacity)); @@ -1168,6 +1300,11 @@ video { background-color: rgb(55 65 81 / var(--tw-bg-opacity)); } + .dark\:hover\:bg-blue-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity)); + } + .dark\:hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); @@ -1177,6 +1314,11 @@ video { --tw-ring-opacity: 1; --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity)); } + + .dark\:focus\:ring-blue-800:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity)); + } } @media (min-width: 768px) { diff --git a/crates/app/src/menu.rs b/crates/app/src/menu.rs index 2b68cbe..dc73752 100644 --- a/crates/app/src/menu.rs +++ b/crates/app/src/menu.rs @@ -19,5 +19,10 @@ pub fn get_menu_items() -> Vec { label: "CPS".to_string(), href: "/cps".to_string(), }, + MenuItem { + id: "debug".to_string(), + label: "DEBUG".to_string(), + href: "/debug".to_string(), + }, ] } diff --git a/crates/app/src/pages/debug.html b/crates/app/src/pages/debug.html new file mode 100644 index 0000000..8b35d9c --- /dev/null +++ b/crates/app/src/pages/debug.html @@ -0,0 +1,72 @@ +{% extends "base.html" %} +{% import "navbar/navbar.html" as navbar -%} + +{% block title %}Pharma Libre - Debug{% endblock %} + +{% block body %} +{% call navbar::navbar(current="debug") %} +
+ +
+
+
+
+

+ Base de données +

+

+ Données extraites de la base de donnée à des fins de debug +

+ + + + + + + + + + + + + + + + + +
+ ID + + Value +
+ db_ping_status + + {{ db_ping_status }} +
+ debug_entries_count + + {{ debug_entries_count }} +
+
+ +
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/crates/app/src/pages/debug.rs b/crates/app/src/pages/debug.rs new file mode 100644 index 0000000..5b505da --- /dev/null +++ b/crates/app/src/pages/debug.rs @@ -0,0 +1,48 @@ +use askama_axum::Template; +use axum::{extract::State, routing}; + +use ::entity::{debug, debug::Entity as DebugEntity}; +use axum_htmx::HxRequest; +use sea_orm::*; + +use crate::AppState; + +async fn get_debug_entries(db: &DatabaseConnection) -> Result, DbErr> { + DebugEntity::find().all(db).await +} + +async fn add_random_debug_entry(State(AppState { db_connection }): State) { + let random_entry = debug::ActiveModel { + title: Set("Random title".to_string()), + text: Set("Random text".to_string()), + ..Default::default() + }; + random_entry.insert(&db_connection).await.unwrap(); +} + +#[derive(Template)] +#[template(path = "debug.html")] +struct GetDebugTemplate { + hx_request: bool, + db_ping_status: bool, + debug_entries_count: usize, +} + +async fn debug( + HxRequest(hx_request): HxRequest, + State(AppState { db_connection }): State, +) -> GetDebugTemplate { + let db_ping_status = db_connection.ping().await.is_ok(); + let debug_entries = get_debug_entries(&db_connection).await.unwrap(); + GetDebugTemplate { + hx_request, + db_ping_status, + debug_entries_count: debug_entries.len(), + } +} + +pub fn get_routes() -> axum::Router { + axum::Router::new() + .route("/", routing::get(debug)) + .route("/add_random", routing::post(add_random_debug_entry)) +} diff --git a/crates/app/src/pages/mod.rs b/crates/app/src/pages/mod.rs index 02f8800..24fd408 100644 --- a/crates/app/src/pages/mod.rs +++ b/crates/app/src/pages/mod.rs @@ -1,10 +1,14 @@ use axum::{routing, Router}; +use crate::AppState; + mod cps; +mod debug; mod home; -pub fn get_routes() -> Router { +pub fn get_routes() -> Router { Router::new() .route("/", routing::get(home::home)) .route("/cps", routing::get(cps::cps)) + .nest("/debug", debug::get_routes()) } From fcba21ef684de13e45f849068fb6c595f1b36b40 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Thu, 19 Sep 2024 23:50:42 +0200 Subject: [PATCH 05/12] chore: define workspace.dependencies and add sea-orm-cli as dev-dep --- Cargo.lock | 988 ++++++++++++++++++++++++++++++--- Cargo.toml | 10 + crates/app/Cargo.toml | 11 +- crates/desktop/Cargo.toml | 12 +- crates/sesam-vitale/Cargo.toml | 7 +- crates/utils/Cargo.toml | 6 +- entity/Cargo.toml | 5 +- migration/Cargo.toml | 3 + 8 files changed, 952 insertions(+), 90 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d7ae3a4..ce182c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,7 +84,103 @@ checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" name = "anyhow" version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "app" +version = "0.1.0" +dependencies = [ + "askama", + "askama_axum", + "axum", + "axum-htmx", + "cargo-watch", + "entity", + "futures", + "listenfd", + "migration", + "notify 6.1.1", + "sea-orm", + "sea-orm-cli", + "serde", + "systemfd", + "thiserror", + "tokio", + "tower-http", + "tower-livereload", + "utils", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_axum" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163" +dependencies = [ + "askama", + "axum-core", + "http", +] + +[[package]] +name = "askama_derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn 2.0.72", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" +dependencies = [ + "nom 7.1.3", +] + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] [[package]] name = "async-broadcast" @@ -118,8 +214,8 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.1.0", + "futures-lite 2.3.0", "slab", ] @@ -129,30 +225,75 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock", + "async-lock 3.4.0", "blocking", - "futures-lite", + "futures-lite 2.3.0", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.3", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", + "tokio", ] [[package]] name = "async-io" -version = "2.3.4" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "async-lock", + "async-lock 3.4.0", "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite", + "futures-lite 2.3.0", "parking", - "polling", - "rustix", + "polling 3.7.2", + "rustix 0.38.34", "slab", "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-lock" version = "3.4.0" @@ -170,16 +311,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-channel", - "async-io", - "async-lock", + "async-channel 2.3.1", + "async-io 2.3.3", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "rustix", + "event-listener 5.3.1", + "futures-lite 2.3.0", + "rustix 0.38.34", "tracing", ] @@ -200,16 +341,65 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io", - "async-lock", + "async-io 2.3.3", + "async-lock 3.4.0", "atomic-waker", "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix", + "rustix 0.38.34", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 2.3.3", + "async-lock 3.4.0", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.3.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] @@ -417,7 +607,7 @@ dependencies = [ "async-channel", "async-task", "futures-io", - "futures-lite", + "futures-lite 2.3.0", "piper", ] @@ -704,26 +894,10 @@ checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", - "cocoa-foundation 0.1.2", - "core-foundation 0.9.4", - "core-graphics 0.23.2", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" -dependencies = [ - "bitflags 2.6.0", - "block", - "cocoa-foundation 0.2.0", - "core-foundation 0.10.0", - "core-graphics 0.24.0", - "foreign-types", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types 0.5.0", "libc", "objc", ] @@ -837,22 +1011,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.6.0", - "core-foundation 0.10.0", - "core-graphics-types 0.2.0", - "foreign-types", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", "libc", ] @@ -1298,6 +1459,34 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +[[package]] +name = "entity" +version = "0.1.0" +dependencies = [ + "sea-orm", + "sea-orm-cli", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "enumflags2" version = "0.7.10" @@ -1368,7 +1557,16 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" @@ -1428,6 +1626,15 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1435,7 +1642,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -1449,6 +1656,12 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -1541,13 +1754,28 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-lite" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand", + "fastrand 2.1.0", "futures-core", "futures-io", "parking", @@ -2183,6 +2411,17 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "iovec" version = "0.1.4" @@ -2403,6 +2642,12 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -2547,6 +2792,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "migration" +version = "0.1.0" +dependencies = [ + "async-std", + "sea-orm-cli", + "sea-orm-migration", +] + [[package]] name = "mime" version = "0.3.17" @@ -2637,6 +2891,23 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.9.0" @@ -2981,14 +3252,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] -name = "open" -version = "5.3.0" +name = "openssl" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "is-wsl", + "bitflags 2.6.0", + "cfg-if 1.0.0", + "foreign-types 0.3.2", "libc", - "pathdiff", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] @@ -3272,7 +3576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand", + "fastrand 2.1.0", "futures-io", ] @@ -3310,7 +3614,23 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ @@ -3318,7 +3638,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix", + "rustix 0.38.34", "tracing", "windows-sys 0.59.0", ] @@ -3638,6 +3958,20 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.34" @@ -3647,7 +3981,7 @@ dependencies = [ "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -3672,6 +4006,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "schemars" version = "0.8.21" @@ -3710,6 +4053,223 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sea-bae" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sea-orm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea1fee0cf8528dbe6eda29d5798afc522a63b75e44c5b15721e6e64af9c7cc4b" +dependencies = [ + "async-stream", + "async-trait", + "bigdecimal", + "chrono", + "futures", + "log", + "ouroboros", + "rust_decimal", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum", + "thiserror", + "time", + "tracing", + "url", + "uuid 1.10.0", +] + +[[package]] +name = "sea-orm-cli" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0b8869c75cf3fbb1bd860abb025033cd2e514c5f4fa43e792697cb1fe6c882" +dependencies = [ + "async-std", + "chrono", + "clap 4.5.17", + "dotenvy", + "glob", + "regex", + "sea-orm-codegen", + "sea-schema", + "sqlx", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "sea-orm-codegen" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333feee6daae1525e702da609cf91e41ce190b1187dcb2bdcc435cb7d649c45a" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-query", + "syn 2.0.72", + "tracing", +] + +[[package]] +name = "sea-orm-macros" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8737b566799ed0444f278d13c300c4c6f1a91782f60ff5825a591852d5502030" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.72", + "unicode-ident", +] + +[[package]] +name = "sea-orm-migration" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216643749e26ce27ab6c51d3475f2692981d4a902d34455bcd322f412900df5c" +dependencies = [ + "async-trait", + "clap 4.5.17", + "dotenvy", + "futures", + "sea-orm", + "sea-orm-cli", + "sea-schema", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sea-query" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5073b2cfed767511a57d18115f3b3d8bcb5690bf8c89518caec6cb22c0cd74" +dependencies = [ + "bigdecimal", + "chrono", + "educe", + "inherent", + "ordered-float", + "rust_decimal", + "sea-query-derive", + "serde_json", + "time", + "uuid 1.10.0", +] + +[[package]] +name = "sea-query-binder" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754965d4aee6145bec25d0898e5c931e6c22859789ce62fd85a42a15ed5a8ce3" +dependencies = [ + "bigdecimal", + "chrono", + "rust_decimal", + "sea-query", + "serde_json", + "sqlx", + "time", + "uuid 1.10.0", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a82fcb49253abcb45cdcb2adf92956060ec0928635eb21b4f7a6d8f25ab0bc" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", + "thiserror", +] + +[[package]] +name = "sea-schema" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad52149fc81836ea7424c3425d8f6ed8ad448dd16d2e4f6a3907ba46f3f2fd78" +dependencies = [ + "futures", + "sea-query", + "sea-query-binder", + "sea-schema-derive", + "sqlx", +] + +[[package]] +name = "sea-schema-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "selectors" version = "0.22.0" @@ -3990,6 +4550,27 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "socket2" version = "0.5.7" @@ -4008,8 +4589,8 @@ checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ "bytemuck", "cfg_aliases", - "core-graphics 0.23.2", - "foreign-types", + "core-graphics", + "foreign-types 0.5.0", "js-sys", "log", "objc2", @@ -4049,6 +4630,255 @@ dependencies = [ "system-deps", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom 7.1.3", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash 0.8.11", + "async-io 1.13.0", + "async-std", + "atoi", + "bigdecimal", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 2.5.3", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap 2.2.6", + "log", + "memchr", + "native-tls", + "once_cell", + "paste", + "percent-encoding", + "rust_decimal", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid 1.10.0", + "webpki-roots", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "async-std", + "dotenvy", + "either", + "heck 0.4.1", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa 1.0.11", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "rust_decimal", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid 1.10.0", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64 0.21.7", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa 1.0.11", + "log", + "md-5", + "memchr", + "num-bigint", + "once_cell", + "rand 0.8.5", + "rust_decimal", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid 1.10.0", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "time", + "tracing", + "url", + "urlencoding", + "uuid 1.10.0", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4519,9 +5349,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if 1.0.0", - "fastrand", + "fastrand 2.1.0", "once_cell", - "rustix", + "rustix 0.38.34", "windows-sys 0.59.0", ] @@ -5102,6 +5932,12 @@ dependencies = [ "libc", ] +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -5330,7 +6166,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.34", ] [[package]] @@ -5865,8 +6701,8 @@ dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io", - "async-lock", + "async-io 2.3.3", + "async-lock 3.4.0", "async-process", "async-recursion", "async-task", diff --git a/Cargo.toml b/Cargo.toml index f041158..37bd15c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,14 @@ members = [ "crates/utils", "migration", "entity", + ".", ] + +[workspace.dependencies] +anyhow = "1.0" +axum = "0.7.5" +dotenv = "0.15" +sea-orm-cli = "1.0.1" +sea-orm = "1.0.1" +thiserror = "1.0" +tokio = "1.39.1" diff --git a/crates/app/Cargo.toml b/crates/app/Cargo.toml index 3d07cd0..c864b62 100644 --- a/crates/app/Cargo.toml +++ b/crates/app/Cargo.toml @@ -6,20 +6,20 @@ edition = "2021" [dependencies] askama = "0.12.1" askama_axum = "0.4.0" -axum = "0.7.5" +axum.workspace = true axum-htmx = { version = "0.6", features = ["auto-vary"] } futures = "0.3.30" listenfd = "1.0.1" notify = "6.1.1" -sea-orm = { version = "1.0.1", features = [ - # Same as in the migration crate +sea-orm = { workspace = true, features = [ + # Same `ASYNC_RUNTIME` and `DATABASE_DRIVER` as in the migration crate "sqlx-sqlite", "runtime-tokio-rustls", "macros", ] } serde = { version = "1.0.204", features = ["derive"] } -thiserror = "1.0.63" -tokio = { version = "1.39.1", features = ["macros", "rt-multi-thread"] } +thiserror.workspace = true +tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } tower-http = { version = "0.5.2", features = ["fs"] } tower-livereload = "0.9.3" @@ -30,3 +30,4 @@ utils = { path = "../utils" } [dev-dependencies] cargo-watch = "8.5.1" systemfd = "0.4.0" +sea-orm-cli.workspace = true diff --git a/crates/desktop/Cargo.toml b/crates/desktop/Cargo.toml index 2d0c806..da25acb 100644 --- a/crates/desktop/Cargo.toml +++ b/crates/desktop/Cargo.toml @@ -13,8 +13,16 @@ crate-type = ["lib", "cdylib", "staticlib"] tauri-build = { version = "2.0.0-rc", features = [] } [dependencies] -tauri = { version = "2.0.0-rc", features = [] } -tauri-plugin-shell = "2.0.0-rc" +axum.workspace = true +bytes = "1.6.1" +http = "1.1.0" serde = { version = "1", features = ["derive"] } serde_json = "1" +tauri = { version = "2.0.0-rc", features = [] } +tauri-plugin-shell = "2.0.0-rc" +thiserror.workspace = true +tower = "0.4.13" +tokio.workspace = true + +app = { path = "../app" } diff --git a/crates/sesam-vitale/Cargo.toml b/crates/sesam-vitale/Cargo.toml index a61ee67..70ba941 100644 --- a/crates/sesam-vitale/Cargo.toml +++ b/crates/sesam-vitale/Cargo.toml @@ -4,10 +4,11 @@ version = "0.1.0" edition = "2021" [dependencies] -anyhow = "1.0" +anyhow.workspace = true libc = "0.2" -thiserror = "1.0" +thiserror.workspace = true + utils = { path = "../utils" } [build-dependencies] -dotenv = "0.15" +dotenv.workspace = true diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index d89f083..f6b819e 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -anyhow = "1.0" +anyhow.workspace = true directories = "5.0" -dotenv = "0.15" -thiserror = "1.0" +dotenv.workspace = true +thiserror.workspace = true diff --git a/entity/Cargo.toml b/entity/Cargo.toml index d7ae904..d41373f 100644 --- a/entity/Cargo.toml +++ b/entity/Cargo.toml @@ -8,4 +8,7 @@ name = "entity" path = "src/lib.rs" [dependencies] -sea-orm = { version = "1.0.1" } +sea-orm.workspace = true + +[dev-dependencies] +sea-orm-cli.workspace = true diff --git a/migration/Cargo.toml b/migration/Cargo.toml index 6b190a4..9af16db 100644 --- a/migration/Cargo.toml +++ b/migration/Cargo.toml @@ -11,6 +11,9 @@ path = "src/lib.rs" [dependencies] async-std = { version = "1", features = ["attributes", "tokio1"] } +[dev-dependencies] +sea-orm-cli.workspace = true + [dependencies.sea-orm-migration] version = "1.0.0" features = [ From 777b7f2425e4717b8b6fd49d58c230efbc7de903 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 14:20:55 +0200 Subject: [PATCH 06/12] feat: fixup "setup seaorm and a first "debug" entity as example" --- Cargo.toml | 2 -- README.md | 2 +- crates/backend/Cargo.toml | 12 +++++++++++- crates/backend/README.md | 9 +++++++++ crates/{app => backend}/src/db.rs | 0 crates/backend/src/lib.rs | 16 +++++++++++++--- crates/backend/src/main.rs | 5 +++-- crates/desktop/Cargo.toml | 6 +----- 8 files changed, 38 insertions(+), 14 deletions(-) rename crates/{app => backend}/src/db.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 37bd15c..e44ebaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,9 +12,7 @@ members = [ [workspace.dependencies] anyhow = "1.0" -axum = "0.7.5" dotenv = "0.15" sea-orm-cli = "1.0.1" sea-orm = "1.0.1" thiserror = "1.0" -tokio = "1.39.1" diff --git a/README.md b/README.md index 05d7aec..c3f958d 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ cargo tauri build ### Création d'une migration ```bash -sea-orm-cli migrate generate +sea-orm-cli migrate generate ``` Cette commande génère un fichier de migration à adapter dans le dossier `migration/src`. diff --git a/crates/backend/Cargo.toml b/crates/backend/Cargo.toml index b2fffd0..8fe4ba0 100644 --- a/crates/backend/Cargo.toml +++ b/crates/backend/Cargo.toml @@ -7,11 +7,21 @@ edition = "2021" anyhow = "1.0.89" axum = "0.7.6" listenfd = "1.0.1" -thiserror.workspace = true tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] } +sea-orm = { workspace = true, features = [ + # Same `ASYNC_RUNTIME` and `DATABASE_DRIVER` as in the migration crate + "sqlx-sqlite", + "runtime-tokio-rustls", + "macros", +] } +thiserror.workspace = true + +entity = { path = "../../entity" } +migration = { path = "../../migration" } utils = { path = "../utils" } [dev-dependencies] cargo-watch = "8.5.2" +sea-orm-cli.workspace = true systemfd = "0.4.3" diff --git a/crates/backend/README.md b/crates/backend/README.md index f709a46..97281a4 100644 --- a/crates/backend/README.md +++ b/crates/backend/README.md @@ -10,6 +10,15 @@ En développement, le mécanisme de hot-reload nécessite de disposer de `cargo- cargo install cargo-watch systemfd ``` +## Configuration + +> Astuce : lorsqu'on exécute directement la crate `backend` à des fins de développement, le système de configuration n'utilisera pas l'éventuel fichier `.env` situé à la racine du workspace Rust. Pour éviter de dupliquer le fichier `.env`, il est possible de créer un lien symbolique vers le fichier `.env` de la crate `backend` : + +```bash +cd crates/backend +ln -s ../../.env .env +``` + ## Développement Pour lancer le serveur en mode développement, exécutez la commande suivante : diff --git a/crates/app/src/db.rs b/crates/backend/src/db.rs similarity index 100% rename from crates/app/src/db.rs rename to crates/backend/src/db.rs diff --git a/crates/backend/src/lib.rs b/crates/backend/src/lib.rs index 72ee327..150174a 100644 --- a/crates/backend/src/lib.rs +++ b/crates/backend/src/lib.rs @@ -2,10 +2,13 @@ use anyhow::Error as AnyError; use axum::http::{StatusCode, Uri}; use axum::response::{IntoResponse, Response}; use axum::{routing::get, Router}; +use sea_orm::{DatabaseConnection, DbErr}; use thiserror::Error; use ::utils::config::{load_config, ConfigError}; +mod db; + #[derive(Error, Debug)] pub enum InitError { #[error(transparent)] @@ -17,10 +20,17 @@ pub fn init() -> Result<(), InitError> { Ok(()) } -pub fn get_router() -> Router { - Router::new() +#[derive(Clone)] +pub struct AppState { + db_connection: DatabaseConnection, +} + +pub async fn get_router() -> Result { + let db_connection = db::get_connection().await?; + + Ok(Router::new() .route("/", get(|| async { "Hello, world!" })) - .fallback(fallback) + .fallback(fallback)) } async fn fallback(uri: Uri) -> (StatusCode, String) { diff --git a/crates/backend/src/main.rs b/crates/backend/src/main.rs index e9a489f..840e751 100644 --- a/crates/backend/src/main.rs +++ b/crates/backend/src/main.rs @@ -10,16 +10,17 @@ pub enum BackendError { ServeTCPListener(#[from] std::io::Error), #[error("Error while initialising the backend")] InitError(#[from] InitError), + #[error("Error with the database connection")] + DatabaseConnection(#[from] sea_orm::DbErr), } #[tokio::main] async fn main() -> Result<(), BackendError> { init()?; - let app = get_router(); + let app = get_router().await?; let mut listenfd = ListenFd::from_env(); - let listener = match listenfd.take_tcp_listener(0)? { // if we are given a tcp listener on listen fd 0, we use that one Some(listener) => { diff --git a/crates/desktop/Cargo.toml b/crates/desktop/Cargo.toml index da25acb..0e24fba 100644 --- a/crates/desktop/Cargo.toml +++ b/crates/desktop/Cargo.toml @@ -13,16 +13,12 @@ crate-type = ["lib", "cdylib", "staticlib"] tauri-build = { version = "2.0.0-rc", features = [] } [dependencies] -axum.workspace = true bytes = "1.6.1" http = "1.1.0" serde = { version = "1", features = ["derive"] } serde_json = "1" tauri = { version = "2.0.0-rc", features = [] } tauri-plugin-shell = "2.0.0-rc" -thiserror.workspace = true tower = "0.4.13" -tokio.workspace = true - -app = { path = "../app" } +thiserror.workspace = true From 90e79c1fa4f87227e58ee11e1142c36b32421826 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 15:46:53 +0200 Subject: [PATCH 07/12] feat: fixup "add a DEBUG page to the UI with a database usage example" --- Cargo.toml | 1 + README.md | 2 +- crates/backend/Cargo.toml | 3 ++- crates/backend/src/api/debug.rs | 48 +++++++++++++++++++++++++++++++++ crates/backend/src/api/mod.rs | 9 +++++++ crates/backend/src/lib.rs | 6 ++++- entity/Cargo.toml | 1 + entity/src/entities/debug.rs | 3 ++- 8 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 crates/backend/src/api/debug.rs create mode 100644 crates/backend/src/api/mod.rs diff --git a/Cargo.toml b/Cargo.toml index e44ebaf..be7312c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,5 @@ anyhow = "1.0" dotenv = "0.15" sea-orm-cli = "1.0.1" sea-orm = "1.0.1" +serde = { version = "1.0.210", features = ["derive"] } thiserror = "1.0" diff --git a/README.md b/README.md index c3f958d..3d2fd2f 100644 --- a/README.md +++ b/README.md @@ -113,5 +113,5 @@ sea-orm-cli migrate up ### Génération des entitées ```bash -sea-orm-cli generate entity -o entity/src/entities +sea-orm-cli generate entity -o entity/src/entities --with-serde both ``` \ No newline at end of file diff --git a/crates/backend/Cargo.toml b/crates/backend/Cargo.toml index 8fe4ba0..0ceef47 100644 --- a/crates/backend/Cargo.toml +++ b/crates/backend/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] anyhow = "1.0.89" -axum = "0.7.6" +axum = { version = "0.7.6", features = ["macros"] } listenfd = "1.0.1" tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] } @@ -15,6 +15,7 @@ sea-orm = { workspace = true, features = [ "runtime-tokio-rustls", "macros", ] } +serde.workspace = true thiserror.workspace = true entity = { path = "../../entity" } diff --git a/crates/backend/src/api/debug.rs b/crates/backend/src/api/debug.rs new file mode 100644 index 0000000..6234239 --- /dev/null +++ b/crates/backend/src/api/debug.rs @@ -0,0 +1,48 @@ +use axum::{extract::State, routing, Json}; +use sea_orm::*; +use serde::Serialize; + +use ::entity::{debug, debug::Entity as DebugEntity}; + +use crate::{AppError, AppState}; + +// DATABASE DEBUG CONTROLLERS + +async fn get_debug_entries(db: &DatabaseConnection) -> Result, DbErr> { + DebugEntity::find().all(db).await +} + +async fn add_random_debug_entry(State(AppState { db_connection }): State) { + let random_entry = debug::ActiveModel { + title: Set("Random title".to_string()), + text: Set("Random text".to_string()), + ..Default::default() + }; + random_entry.insert(&db_connection).await.unwrap(); +} + +// API HANDLER + +#[derive(Serialize, Debug)] +struct DebugResponse { + db_ping_status: bool, + entries: Vec, +} + +#[axum::debug_handler] +async fn debug( + State(AppState { db_connection }): State, +) -> Result, AppError> { + let db_ping_status = db_connection.ping().await.is_ok(); + let debug_entries = get_debug_entries(&db_connection).await?; + Ok(Json(DebugResponse { + db_ping_status, + entries: debug_entries, + })) +} + +pub fn get_routes() -> axum::Router { + axum::Router::new() + .route("/", routing::get(debug)) + .route("/add_random", routing::post(add_random_debug_entry)) +} diff --git a/crates/backend/src/api/mod.rs b/crates/backend/src/api/mod.rs new file mode 100644 index 0000000..8aaa3bd --- /dev/null +++ b/crates/backend/src/api/mod.rs @@ -0,0 +1,9 @@ +use axum::Router; + +use crate::AppState; + +mod debug; + +pub fn get_routes() -> Router { + Router::new().nest("/debug", debug::get_routes()) +} diff --git a/crates/backend/src/lib.rs b/crates/backend/src/lib.rs index 150174a..c9423b9 100644 --- a/crates/backend/src/lib.rs +++ b/crates/backend/src/lib.rs @@ -7,6 +7,7 @@ use thiserror::Error; use ::utils::config::{load_config, ConfigError}; +mod api; mod db; #[derive(Error, Debug)] @@ -27,10 +28,13 @@ pub struct AppState { pub async fn get_router() -> Result { let db_connection = db::get_connection().await?; + let state: AppState = AppState { db_connection }; Ok(Router::new() .route("/", get(|| async { "Hello, world!" })) - .fallback(fallback)) + .merge(api::get_routes()) + .fallback(fallback) + .with_state(state)) } async fn fallback(uri: Uri) -> (StatusCode, String) { diff --git a/entity/Cargo.toml b/entity/Cargo.toml index d41373f..6a75cc0 100644 --- a/entity/Cargo.toml +++ b/entity/Cargo.toml @@ -9,6 +9,7 @@ path = "src/lib.rs" [dependencies] sea-orm.workspace = true +serde.workspace = true [dev-dependencies] sea-orm-cli.workspace = true diff --git a/entity/src/entities/debug.rs b/entity/src/entities/debug.rs index 0a0b0a9..d08379e 100644 --- a/entity/src/entities/debug.rs +++ b/entity/src/entities/debug.rs @@ -1,8 +1,9 @@ //! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.1 use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] #[sea_orm(table_name = "debug")] pub struct Model { #[sea_orm(primary_key)] From f3e2090e7f7d2e54f5221190452cc16b26c21a00 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 15:47:26 +0200 Subject: [PATCH 08/12] chore: fixup "define workspace.dependencies and add sea-orm-cli as dev-dep" --- Cargo.lock | 1656 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 1233 insertions(+), 423 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ce182c7..0fa745a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] @@ -17,6 +17,36 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if 1.0.0", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "0.7.20" @@ -35,6 +65,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -50,6 +86,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -74,42 +116,60 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + [[package]] name = "anstyle" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + [[package]] name = "anyhow" version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "app" -version = "0.1.0" -dependencies = [ - "askama", - "askama_axum", - "axum", - "axum-htmx", - "cargo-watch", - "entity", - "futures", - "listenfd", - "migration", - "notify 6.1.1", - "sea-orm", - "sea-orm-cli", - "serde", - "systemfd", - "thiserror", - "tokio", - "tower-http", - "tower-livereload", - "utils", -] +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arrayvec" @@ -117,61 +177,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "askama" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" -dependencies = [ - "askama_derive", - "askama_escape", - "humansize", - "num-traits", - "percent-encoding", -] - -[[package]] -name = "askama_axum" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163" -dependencies = [ - "askama", - "axum-core", - "http", -] - -[[package]] -name = "askama_derive" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" -dependencies = [ - "askama_parser", - "basic-toml", - "mime", - "mime_guess", - "proc-macro2", - "quote", - "serde", - "syn 2.0.72", -] - -[[package]] -name = "askama_escape" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" - -[[package]] -name = "askama_parser" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "async-attributes" version = "1.1.2" @@ -188,12 +193,23 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "futures-core", "pin-project-lite", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -214,7 +230,7 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-lite 2.3.0", "slab", ] @@ -238,7 +254,7 @@ checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ "async-channel 2.3.1", "async-executor", - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "blocking", "futures-lite 2.3.0", @@ -268,7 +284,7 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ @@ -278,8 +294,8 @@ dependencies = [ "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.7.2", - "rustix 0.38.34", + "polling 3.7.3", + "rustix 0.38.37", "slab", "tracing", "windows-sys 0.59.0", @@ -300,7 +316,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "pin-project-lite", ] @@ -312,7 +328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "async-signal", "async-task", @@ -320,7 +336,7 @@ dependencies = [ "cfg-if 1.0.0", "event-listener 5.3.1", "futures-lite 2.3.0", - "rustix 0.38.34", + "rustix 0.38.37", "tracing", ] @@ -332,7 +348,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -341,16 +357,16 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "atomic-waker", "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.37", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -362,7 +378,7 @@ dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor", - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "crossbeam-utils", "futures-channel", @@ -399,7 +415,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -416,7 +432,7 @@ checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -442,6 +458,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -473,6 +498,7 @@ checksum = "8f43644eed690f5374f1af436ecd6aea01cd201f6fbdf0178adaf6907afb2cec" dependencies = [ "async-trait", "axum-core", + "axum-macros", "bytes", "futures-util", "http", @@ -520,6 +546,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "backend" version = "0.1.0" @@ -527,24 +564,31 @@ dependencies = [ "anyhow", "axum", "cargo-watch", + "entity", "listenfd", + "migration", + "sea-orm", + "sea-orm-cli", + "serde", "systemfd", + "thiserror", "tokio", + "utils", ] [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -559,6 +603,23 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -574,6 +635,18 @@ dependencies = [ "serde", ] +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block" version = "0.1.6" @@ -604,13 +677,37 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite 2.3.0", "piper", ] +[[package]] +name = "borsh" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" +dependencies = [ + "borsh-derive", + "cfg_aliases 0.1.1", +] + +[[package]] +name = "borsh-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.77", + "syn_derive", +] + [[package]] name = "brotli" version = "6.0.0" @@ -648,10 +745,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "bytemuck" -version = "1.16.1" +name = "bytecheck" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytemuck" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -661,9 +780,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" dependencies = [ "serde", ] @@ -695,9 +814,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -763,14 +882,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.8.16", + "toml 0.8.2", ] [[package]] name = "cc" -version = "1.1.6" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +dependencies = [ + "shlex", +] [[package]] name = "cesu8" @@ -811,6 +933,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -854,6 +982,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" dependencies = [ "clap_builder", + "clap_derive", ] [[package]] @@ -862,11 +991,25 @@ version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" dependencies = [ + "anstream", "anstyle", "clap_lex", + "strsim 0.11.1", "terminal_size", ] +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "clap_lex" version = "0.7.2" @@ -888,34 +1031,20 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", "cocoa-foundation", - "core-foundation", + "core-foundation 0.10.0", "core-graphics", "foreign-types 0.5.0", "libc", "objc", ] -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "libc", - "objc", -] - [[package]] name = "cocoa-foundation" version = "0.2.0" @@ -925,11 +1054,17 @@ dependencies = [ "bitflags 2.6.0", "block", "core-foundation 0.10.0", - "core-graphics-types 0.2.0", + "core-graphics-types", "libc", "objc", ] +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + [[package]] name = "combine" version = "4.6.7" @@ -972,6 +1107,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "convert_case" version = "0.4.0" @@ -1006,28 +1147,17 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-graphics-types", "foreign-types 0.5.0", "libc", ] -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - [[package]] name = "core-graphics-types" version = "0.2.0" @@ -1041,13 +1171,28 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.2" @@ -1066,6 +1211,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -1106,7 +1260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1116,7 +1270,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1164,7 +1318,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1186,7 +1340,18 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.72", + "syn 2.0.77", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] @@ -1199,6 +1364,17 @@ dependencies = [ "serde", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_builder" version = "0.10.2" @@ -1240,18 +1416,22 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "desktop" version = "0.1.0" dependencies = [ + "bytes", + "http", "serde", "serde_json", "tauri", "tauri-build", "tauri-plugin-shell", + "thiserror", + "tower 0.4.13", ] [[package]] @@ -1261,7 +1441,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", + "subtle", ] [[package]] @@ -1361,7 +1543,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1402,9 +1584,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1412,11 +1594,26 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +[[package]] +name = "educe" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4bd92664bf78c4d3dba9b7cdafce6fa15b13ed3ed16175218196942e99168a8" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] [[package]] name = "embed-resource" @@ -1427,7 +1624,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.16", + "toml 0.8.2", "vswhom", "winreg", ] @@ -1465,6 +1662,7 @@ version = "0.1.0" dependencies = [ "sea-orm", "sea-orm-cli", + "serde", ] [[package]] @@ -1484,7 +1682,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1505,7 +1703,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1534,6 +1732,23 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if 1.0.0", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "5.3.1" @@ -1551,7 +1766,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener", + "event-listener 5.3.1", "pin-project-lite", ] @@ -1566,7 +1781,7 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" @@ -1603,12 +1818,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1620,6 +1835,17 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1653,7 +1879,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1712,6 +1938,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futf" version = "0.1.5" @@ -1722,6 +1954,20 @@ dependencies = [ "new_debug_unreachable", ] +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -1729,6 +1975,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1748,6 +1995,17 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + [[package]] name = "futures-io" version = "0.3.30" @@ -1775,7 +2033,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-core", "futures-io", "parking", @@ -1790,7 +2048,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1811,6 +2069,7 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -1977,9 +2236,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gio" @@ -2043,11 +2302,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ "heck 0.4.1", - "proc-macro-crate 2.0.0", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2079,6 +2338,18 @@ dependencies = [ "regex", ] +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "gobject-sys" version = "0.18.0" @@ -2139,7 +2410,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2147,18 +2418,37 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "heck" @@ -2193,6 +2483,24 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "home" version = "0.5.9" @@ -2284,9 +2592,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -2295,7 +2603,7 @@ dependencies = [ "http-body", "hyper", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower 0.4.13", "tower-service", @@ -2304,9 +2612,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2364,9 +2672,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2382,6 +2690,17 @@ dependencies = [ "cfb", ] +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "inotify" version = "0.7.1" @@ -2433,9 +2752,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is-docker" @@ -2456,6 +2775,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itoa" version = "0.4.8" @@ -2515,9 +2840,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2579,11 +2904,23 @@ dependencies = [ "selectors", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "lazycell" @@ -2617,9 +2954,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -2631,6 +2968,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libredox" version = "0.1.3" @@ -2642,6 +2985,17 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -2680,6 +3034,9 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] [[package]] name = "loom" @@ -2759,6 +3116,16 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if 1.0.0", + "digest", +] + [[package]] name = "memchr" version = "2.7.4" @@ -2807,6 +3174,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.4" @@ -2817,6 +3190,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.6.23" @@ -2838,9 +3220,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -2878,7 +3260,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba8ac4080fb1e097c2c22acae467e46e4da72d941f02e82b67a87a2a89fa38b1" dependencies = [ - "cocoa 0.26.0", + "cocoa", "crossbeam-channel", "dpi", "gtk", @@ -2993,13 +3375,12 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ "bitflags 2.6.0", "cfg-if 1.0.0", - "cfg_aliases", "libc", "memoffset 0.9.1", ] @@ -3020,6 +3401,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "notify" version = "4.0.18" @@ -3061,12 +3452,59 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -3074,6 +3512,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -3091,10 +3530,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3188,7 +3627,6 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.6.0", "block2", - "dispatch", "libc", "objc2", ] @@ -3238,9 +3676,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.2" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -3251,6 +3689,17 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "open" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "openssl" version = "0.10.66" @@ -3274,7 +3723,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3301,6 +3750,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -3321,6 +3779,30 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "ouroboros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "overload" version = "0.1.1" @@ -3381,12 +3863,27 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pathdiff" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -3507,7 +4004,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3554,7 +4051,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3576,15 +4073,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-io", ] [[package]] -name = "pkg-config" -version = "0.3.30" +name = "pkcs1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plist" @@ -3593,7 +4111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.2.6", + "indexmap 2.5.0", "quick-xml 0.32.0", "serde", "time", @@ -3609,7 +4127,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] @@ -3630,7 +4148,7 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ @@ -3638,7 +4156,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.37", "tracing", "windows-sys 0.59.0", ] @@ -3651,9 +4169,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -3673,20 +4194,12 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "toml_edit 0.20.7", -] - -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit 0.21.1", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -3728,6 +4241,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -3748,13 +4281,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.7.3" @@ -3844,18 +4383,18 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", @@ -3864,9 +4403,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick 1.1.3", "memchr", @@ -3907,10 +4446,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] -name = "reqwest" -version = "0.12.5" +name = "rend" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", @@ -3940,7 +4488,87 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if 1.0.0", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", ] [[package]] @@ -3951,9 +4579,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -3974,9 +4602,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -3985,6 +4613,36 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -4038,7 +4696,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4073,7 +4731,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4101,7 +4759,7 @@ dependencies = [ "time", "tracing", "url", - "uuid 1.10.0", + "uuid", ] [[package]] @@ -4112,7 +4770,7 @@ checksum = "5f0b8869c75cf3fbb1bd860abb025033cd2e514c5f4fa43e792697cb1fe6c882" dependencies = [ "async-std", "chrono", - "clap 4.5.17", + "clap 4.5.18", "dotenvy", "glob", "regex", @@ -4134,7 +4792,7 @@ dependencies = [ "proc-macro2", "quote", "sea-query", - "syn 2.0.72", + "syn 2.0.77", "tracing", ] @@ -4148,7 +4806,7 @@ dependencies = [ "proc-macro2", "quote", "sea-bae", - "syn 2.0.72", + "syn 2.0.77", "unicode-ident", ] @@ -4159,7 +4817,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "216643749e26ce27ab6c51d3475f2692981d4a902d34455bcd322f412900df5c" dependencies = [ "async-trait", - "clap 4.5.17", + "clap 4.5.18", "dotenvy", "futures", "sea-orm", @@ -4184,7 +4842,7 @@ dependencies = [ "sea-query-derive", "serde_json", "time", - "uuid 1.10.0", + "uuid", ] [[package]] @@ -4200,7 +4858,7 @@ dependencies = [ "serde_json", "sqlx", "time", - "uuid 1.10.0", + "uuid", ] [[package]] @@ -4212,7 +4870,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "thiserror", ] @@ -4238,7 +4896,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4254,7 +4912,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "security-framework-sys", @@ -4262,9 +4920,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -4301,9 +4959,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4321,13 +4979,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4338,16 +4996,17 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa 1.0.11", + "memchr", "ryu", "serde", ] @@ -4370,7 +5029,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4404,7 +5063,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -4421,7 +5080,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -4514,6 +5173,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4523,12 +5188,28 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" version = "0.3.11" @@ -4550,17 +5231,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "winapi 0.3.9", -] - [[package]] name = "socket2" version = "0.4.10" @@ -4583,25 +5253,24 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", - "cfg_aliases", + "cfg_aliases 0.2.1", "core-graphics", "foreign-types 0.5.0", "js-sys", "log", "objc2", - "objc2-app-kit", "objc2-foundation", "objc2-quartz-core", "raw-window-handle", "redox_syscall", "wasm-bindgen", "web-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4697,7 +5366,7 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap 2.2.6", + "indexmap 2.5.0", "log", "memchr", "native-tls", @@ -4718,7 +5387,7 @@ dependencies = [ "tokio-stream", "tracing", "url", - "uuid 1.10.0", + "uuid", "webpki-roots", ] @@ -4805,7 +5474,7 @@ dependencies = [ "thiserror", "time", "tracing", - "uuid 1.10.0", + "uuid", "whoami", ] @@ -4849,7 +5518,7 @@ dependencies = [ "thiserror", "time", "tracing", - "uuid 1.10.0", + "uuid", "whoami", ] @@ -4876,7 +5545,7 @@ dependencies = [ "tracing", "url", "urlencoding", - "uuid 1.10.0", + "uuid", ] [[package]] @@ -4939,6 +5608,17 @@ dependencies = [ "quote", ] +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + [[package]] name = "strsim" version = "0.8.0" @@ -4957,6 +5637,18 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "swift-rs" version = "1.0.7" @@ -4981,15 +5673,27 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -5001,6 +5705,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-deps" @@ -5011,7 +5718,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.16", + "toml 0.8.2", "version-compare", ] @@ -5028,21 +5735,21 @@ dependencies = [ "libc", "nix 0.26.4", "regex", - "socket2", + "socket2 0.5.7", "uuid", "windows-sys 0.52.0", ] [[package]] name = "tao" -version = "0.30.1" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e7ede56f9ef03a0bb384c7b2bed4f3985ee7f3f79ec887c50d8466eec21096" +checksum = "06e48d7c56b3f7425d061886e8ce3b6acfab1993682ed70bef50fd133d721ee6" dependencies = [ "bitflags 2.6.0", - "cocoa 0.26.0", + "cocoa", "core-foundation 0.10.0", - "core-graphics 0.24.0", + "core-graphics", "crossbeam-channel", "dispatch", "dlopen2", @@ -5074,20 +5781,26 @@ dependencies = [ [[package]] name = "tao-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] -name = "target-lexicon" -version = "0.12.15" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" @@ -5158,7 +5871,7 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml 0.8.16", + "toml 0.8.2", "walkdir", ] @@ -5180,7 +5893,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.72", + "syn 2.0.77", "tauri-utils", "thiserror", "time", @@ -5198,7 +5911,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "tauri-codegen", "tauri-utils", ] @@ -5216,7 +5929,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml 0.8.16", + "toml 0.8.2", "walkdir", ] @@ -5315,7 +6028,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror", - "toml 0.8.16", + "toml 0.8.2", "url", "urlpattern", "walkdir", @@ -5349,9 +6062,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.1.0", + "fastrand 2.1.1", "once_cell", - "rustix 0.38.34", + "rustix 0.38.37", "windows-sys 0.59.0", ] @@ -5381,7 +6094,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ - "rustix", + "rustix 0.38.37", "windows-sys 0.48.0", ] @@ -5393,7 +6106,7 @@ checksum = "da31aef70da0f6352dbcb462683eb4dd2bfad01cf3fc96cf204547b9a839a585" dependencies = [ "dirs 4.0.0", "fnv", - "nom", + "nom 5.1.3", "phf 0.11.2", "phf_codegen 0.11.2", ] @@ -5415,22 +6128,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5498,9 +6211,9 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.1", + "mio 1.0.2", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.52.0", ] @@ -5513,14 +6226,25 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5543,21 +6267,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.16" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.17", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.7" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] @@ -5568,46 +6292,24 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] name = "toml_edit" -version = "0.20.7" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16" -dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.16", + "winnow", ] [[package]] @@ -5623,6 +6325,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -5673,7 +6376,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -5721,7 +6424,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "044d7738b3d50f288ddef035b793228740ad4d927f5466b0af55dc15e7e03cfe" dependencies = [ - "core-graphics 0.24.0", + "core-graphics", "crossbeam-channel", "dirs 5.0.1", "libappindicator", @@ -5744,9 +6447,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typeid" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] name = "typenum" @@ -5814,24 +6517,30 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-properties" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" @@ -5839,6 +6548,18 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.2" @@ -5851,6 +6572,12 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "urlpattern" version = "0.3.0" @@ -5869,6 +6596,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "utils" version = "0.1.0" @@ -5886,6 +6619,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom 0.2.15", + "serde", ] [[package]] @@ -5894,6 +6628,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" @@ -5970,35 +6716,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "wasm-bindgen" -version = "0.2.92" +name = "wasite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if 1.0.0", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -6008,9 +6761,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6018,22 +6771,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -6069,9 +6822,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -6121,6 +6874,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "webview2-com" version = "0.33.0" @@ -6143,7 +6902,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6166,7 +6925,17 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix 0.38.37", +] + +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall", + "wasite", ] [[package]] @@ -6199,11 +6968,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6214,14 +6983,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" dependencies = [ - "cocoa 0.25.0", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "raw-window-handle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "windows-version", ] @@ -6296,7 +7066,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6307,7 +7077,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6318,7 +7088,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -6329,7 +7099,18 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] @@ -6592,15 +7373,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winnow" -version = "0.6.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.52.0" @@ -6619,8 +7391,8 @@ checksum = "f4d715cf5fe88e9647f3d17b207b6d060d4a88e7171d4ccb2d2c657dd1d44728" dependencies = [ "base64 0.22.1", "block", - "cocoa 0.26.0", - "core-graphics 0.24.0", + "cocoa", + "core-graphics", "crossbeam-channel", "dpi", "dunce", @@ -6661,6 +7433,15 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11" version = "2.21.0" @@ -6694,27 +7475,28 @@ dependencies = [ [[package]] name = "zbus" -version = "4.4.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "async-process", "async-recursion", "async-task", "async-trait", "blocking", + "derivative", "enumflags2", - "event-listener", + "event-listener 5.3.1", "futures-core", "futures-sink", "futures-util", "hex", - "nix 0.29.0", + "nix 0.27.1", "ordered-stream", "rand 0.8.5", "serde", @@ -6732,14 +7514,15 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.4.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.72", + "regex", + "syn 1.0.109", "zvariant_utils", ] @@ -6755,10 +7538,37 @@ dependencies = [ ] [[package]] -name = "zvariant" -version = "4.2.0" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zvariant" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" dependencies = [ "endi", "enumflags2", @@ -6769,24 +7579,24 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "4.2.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 1.0.109", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "2.1.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 1.0.109", ] From 0aa0aebbad5a433721551c679b885b8e30397677 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 17:39:57 +0200 Subject: [PATCH 09/12] chore: Remove app crate --- crates/app/.gitignore | 4 - crates/app/Cargo.toml | 33 - crates/app/README.md | 44 - crates/app/askama.toml | 6 - crates/app/assets/css/style.css | 1345 ----------------- crates/app/assets/js/alpinejs@3.14.1.min.js | 5 - crates/app/assets/js/flowbite@2.5.1.min.js | 2 - crates/app/assets/js/htmx@2.0.1.min.js | 1 - crates/app/css/input.css | 3 - crates/app/src/components/base.html | 23 - .../app/src/components/navbar/menu-item.html | 18 - crates/app/src/components/navbar/navbar.html | 50 - crates/app/src/components/skeletons/card.html | 22 - .../src/components/skeletons/menu-items.html | 4 - .../src/components/skeletons/page-title.html | 1 - crates/app/src/lib.rs | 47 - crates/app/src/main.rs | 90 -- crates/app/src/menu.rs | 28 - crates/app/src/pages/cps.html | 43 - crates/app/src/pages/cps.rs | 12 - crates/app/src/pages/debug.html | 72 - crates/app/src/pages/debug.rs | 48 - crates/app/src/pages/home.html | 43 - crates/app/src/pages/home.rs | 12 - crates/app/src/pages/mod.rs | 14 - crates/app/tailwind.config.js | 12 - 26 files changed, 1982 deletions(-) delete mode 100644 crates/app/.gitignore delete mode 100644 crates/app/Cargo.toml delete mode 100644 crates/app/README.md delete mode 100644 crates/app/askama.toml delete mode 100644 crates/app/assets/css/style.css delete mode 100644 crates/app/assets/js/alpinejs@3.14.1.min.js delete mode 100644 crates/app/assets/js/flowbite@2.5.1.min.js delete mode 100644 crates/app/assets/js/htmx@2.0.1.min.js delete mode 100644 crates/app/css/input.css delete mode 100644 crates/app/src/components/base.html delete mode 100644 crates/app/src/components/navbar/menu-item.html delete mode 100644 crates/app/src/components/navbar/navbar.html delete mode 100644 crates/app/src/components/skeletons/card.html delete mode 100644 crates/app/src/components/skeletons/menu-items.html delete mode 100644 crates/app/src/components/skeletons/page-title.html delete mode 100644 crates/app/src/lib.rs delete mode 100644 crates/app/src/main.rs delete mode 100644 crates/app/src/menu.rs delete mode 100644 crates/app/src/pages/cps.html delete mode 100644 crates/app/src/pages/cps.rs delete mode 100644 crates/app/src/pages/debug.html delete mode 100644 crates/app/src/pages/debug.rs delete mode 100644 crates/app/src/pages/home.html delete mode 100644 crates/app/src/pages/home.rs delete mode 100644 crates/app/src/pages/mod.rs delete mode 100644 crates/app/tailwind.config.js diff --git a/crates/app/.gitignore b/crates/app/.gitignore deleted file mode 100644 index 60f12af..0000000 --- a/crates/app/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target - -# Tailwind CSS CLI -tailwindcss \ No newline at end of file diff --git a/crates/app/Cargo.toml b/crates/app/Cargo.toml deleted file mode 100644 index c864b62..0000000 --- a/crates/app/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "app" -version = "0.1.0" -edition = "2021" - -[dependencies] -askama = "0.12.1" -askama_axum = "0.4.0" -axum.workspace = true -axum-htmx = { version = "0.6", features = ["auto-vary"] } -futures = "0.3.30" -listenfd = "1.0.1" -notify = "6.1.1" -sea-orm = { workspace = true, features = [ - # Same `ASYNC_RUNTIME` and `DATABASE_DRIVER` as in the migration crate - "sqlx-sqlite", - "runtime-tokio-rustls", - "macros", -] } -serde = { version = "1.0.204", features = ["derive"] } -thiserror.workspace = true -tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } -tower-http = { version = "0.5.2", features = ["fs"] } -tower-livereload = "0.9.3" - -entity = { path = "../../entity" } -migration = { path = "../../migration" } -utils = { path = "../utils" } - -[dev-dependencies] -cargo-watch = "8.5.1" -systemfd = "0.4.0" -sea-orm-cli.workspace = true diff --git a/crates/app/README.md b/crates/app/README.md deleted file mode 100644 index 3c5cf9b..0000000 --- a/crates/app/README.md +++ /dev/null @@ -1,44 +0,0 @@ -## Pré-requis - -- Récupérer le binaire TailwindCSS : https://tailwindcss.com/blog/standalone-cli - -## Configuration - -> Astuce : lorsqu'on exécute directement la crate `App` à des fins de développement, le système de configuration n'utilisera pas l'éventuel fichier `.env` situé à la racine du workspace Rust. Pour éviter de dupliquer le fichier `.env`, il est possible de créer un lien symbolique vers le fichier `.env` de la crate `App` : - -```bash -cd crates/app -ln -s ../../.env .env -``` - -## Exécution - -- Lancer tailwindcss en mode watch dans un terminal : -```bash -./tailwindcss -i css/input.css -o assets/css/style.css --watch -``` - -- Lancer le serveur web dans un autre terminal : -```bash -cargo run --bin app -``` - -## Rechargement automatique (_auto-reload_) - -Pour le projet `app`, nous utilisons en plus de `cargo-watch` ses librairies : -- [`systemfd`](https://github.com/mitsuhiko/systemfd) permet de redémarrer un serveur sans interrompre les connexions en cours, il transmet le descripteur de fichier du socket à une nouvelle instance du serveur (exemple: `cargo watch -x run` --> `systemfd --no-pid -s http::3000 -- cargo watch -x run`). Si le port est déjà pris il en prendra un autre. -- [`listenfd`](https://github.com/mitsuhiko/listenfd) permet, côté _Rust_, de démarrer un serveur en utilisant des connexions déjà ouvertes. - -Pour notre application voici la commande à lancer : - -```bash -systemfd --no-pid -s http::3000 -- cargo watch -x 'run --bin app' -``` - -## Chargement à chaud (_livereload_) - -Pour que notre navigateur rafraîchisse automatique notre page lorsque le serveur a été recompilé, nous utilisons la librairie [`tower-livereload`](https://github.com/leotaku/tower-livereload). - -A chaque changement, que ça soit sur du code en _Rust_, _HTML_, _CSS_ ou _JS_ alors le navigateur va recharger entièrement la page. - -En Rust, il n'existe pas encore d'outil de _Hot Reload_ complet et intégré comme on en trouve dans d'autres environnements de développement web, comme pour _Node.js_. diff --git a/crates/app/askama.toml b/crates/app/askama.toml deleted file mode 100644 index e00fe7b..0000000 --- a/crates/app/askama.toml +++ /dev/null @@ -1,6 +0,0 @@ -[general] -# Directories to search for templates, relative to the crate root. -dirs = [ - "src/pages", - "src/components", -] diff --git a/crates/app/assets/css/style.css b/crates/app/assets/css/style.css deleted file mode 100644 index e2769fc..0000000 --- a/crates/app/assets/css/style.css +++ /dev/null @@ -1,1345 +0,0 @@ -/* -! tailwindcss v3.4.7 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #e5e7eb; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -6. Use the user's configured `sans` font-variation-settings by default. -7. Disable tap highlights on iOS -*/ - -html, -:host { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ - font-feature-settings: normal; - /* 5 */ - font-variation-settings: normal; - /* 6 */ - -webkit-tap-highlight-color: transparent; - /* 7 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font-family by default. -2. Use the user's configured `mono` font-feature-settings by default. -3. Use the user's configured `mono` font-variation-settings by default. -4. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-feature-settings: normal; - /* 2 */ - font-variation-settings: normal; - /* 3 */ - font-size: 1em; - /* 4 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-feature-settings: inherit; - /* 1 */ - font-variation-settings: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - letter-spacing: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -input:where([type='button']), -input:where([type='reset']), -input:where([type='submit']) { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Reset default styling for dialogs. -*/ - -dialog { - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} - -.z-50 { - z-index: 50; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - -.my-4 { - margin-top: 1rem; - margin-bottom: 1rem; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mb-2 { - margin-bottom: 0.5rem; -} - -.mb-2\.5 { - margin-bottom: 0.625rem; -} - -.mb-4 { - margin-bottom: 1rem; -} - -.me-3 { - margin-inline-end: 0.75rem; -} - -.mt-3 { - margin-top: 0.75rem; -} - -.mt-4 { - margin-top: 1rem; -} - -.mb-5 { - margin-bottom: 1.25rem; -} - -.block { - display: block; -} - -.flex { - display: flex; -} - -.inline-flex { - display: inline-flex; -} - -.table { - display: table; -} - -.grid { - display: grid; -} - -.hidden { - display: none; -} - -.h-10 { - height: 2.5rem; -} - -.h-2 { - height: 0.5rem; -} - -.h-2\.5 { - height: 0.625rem; -} - -.h-32 { - height: 8rem; -} - -.h-4 { - height: 1rem; -} - -.h-48 { - height: 12rem; -} - -.h-5 { - height: 1.25rem; -} - -.h-7 { - height: 1.75rem; -} - -.h-8 { - height: 2rem; -} - -.h-96 { - height: 24rem; -} - -.h-full { - height: 100%; -} - -.min-h-full { - min-height: 100%; -} - -.w-10 { - width: 2.5rem; -} - -.w-32 { - width: 8rem; -} - -.w-48 { - width: 12rem; -} - -.w-5 { - width: 1.25rem; -} - -.w-8 { - width: 2rem; -} - -.w-full { - width: 100%; -} - -.max-w-3xl { - max-width: 48rem; -} - -.max-w-7xl { - max-width: 80rem; -} - -.max-w-screen-xl { - max-width: 1280px; -} - -.max-w-sm { - max-width: 24rem; -} - -@keyframes pulse { - 50% { - opacity: .5; - } -} - -.animate-pulse { - animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; -} - -.list-none { - list-style-type: none; -} - -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} - -.flex-col { - flex-direction: column; -} - -.flex-wrap { - flex-wrap: wrap; -} - -.items-center { - align-items: center; -} - -.justify-center { - justify-content: center; -} - -.justify-between { - justify-content: space-between; -} - -.gap-4 { - gap: 1rem; -} - -.space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-y-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1rem * var(--tw-space-y-reverse)); -} - -.divide-y > :not([hidden]) ~ :not([hidden]) { - --tw-divide-y-reverse: 0; - border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); - border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); -} - -.divide-gray-100 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-divide-opacity)); -} - -.self-center { - align-self: center; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.whitespace-nowrap { - white-space: nowrap; -} - -.rounded { - border-radius: 0.25rem; -} - -.rounded-full { - border-radius: 9999px; -} - -.rounded-lg { - border-radius: 0.5rem; -} - -.border { - border-width: 1px; -} - -.border-2 { - border-width: 2px; -} - -.border-b { - border-bottom-width: 1px; -} - -.border-dashed { - border-style: dashed; -} - -.border-gray-100 { - --tw-border-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-border-opacity)); -} - -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} - -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - -.bg-blue-700 { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity)); -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-gray-300 { - --tw-bg-opacity: 1; - background-color: rgb(209 213 219 / var(--tw-bg-opacity)); -} - -.bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity)); -} - -.p-2 { - padding: 0.5rem; -} - -.p-4 { - padding: 1rem; -} - -.p-6 { - padding: 1.5rem; -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.px-5 { - padding-left: 1.25rem; - padding-right: 1.25rem; -} - -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.py-10 { - padding-top: 2.5rem; - padding-bottom: 2.5rem; -} - -.py-12 { - padding-top: 3rem; - padding-bottom: 3rem; -} - -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.py-2\.5 { - padding-top: 0.625rem; - padding-bottom: 0.625rem; -} - -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-2xl { - font-size: 1.5rem; - line-height: 2rem; -} - -.text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; -} - -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem; -} - -.text-xs { - font-size: 0.75rem; - line-height: 1rem; -} - -.font-bold { - font-weight: 700; -} - -.font-light { - font-weight: 300; -} - -.font-medium { - font-weight: 500; -} - -.font-semibold { - font-weight: 600; -} - -.uppercase { - text-transform: uppercase; -} - -.leading-tight { - line-height: 1.25; -} - -.tracking-tight { - letter-spacing: -0.025em; -} - -.text-gray-200 { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} - -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} - -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.hover\:bg-gray-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity)); -} - -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.focus\:ring-2:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus\:ring-4:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus\:ring-gray-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity)); -} - -.focus\:ring-gray-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)); -} - -.focus\:ring-blue-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)); -} - -@media (min-width: 640px) { - .sm\:max-w-md { - max-width: 28rem; - } - - .sm\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .sm\:p-8 { - padding: 2rem; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } -} - -@media (min-width: 768px) { - .md\:order-1 { - order: 1; - } - - .md\:order-2 { - order: 2; - } - - .md\:me-0 { - margin-inline-end: 0px; - } - - .md\:mt-0 { - margin-top: 0px; - } - - .md\:flex { - display: flex; - } - - .md\:hidden { - display: none; - } - - .md\:h-64 { - height: 16rem; - } - - .md\:w-auto { - width: auto; - } - - .md\:flex-row { - flex-direction: row; - } - - .md\:space-x-0 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0px * var(--tw-space-x-reverse)); - margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse))); - } - - .md\:space-x-8 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(2rem * var(--tw-space-x-reverse)); - margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); - } - - .md\:space-y-5 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); - } - - .md\:border-0 { - border-width: 0px; - } - - .md\:bg-transparent { - background-color: transparent; - } - - .md\:bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - } - - .md\:p-0 { - padding: 0px; - } - - .md\:p-6 { - padding: 1.5rem; - } - - .md\:text-2xl { - font-size: 1.5rem; - line-height: 2rem; - } - - .md\:text-blue-700 { - --tw-text-opacity: 1; - color: rgb(29 78 216 / var(--tw-text-opacity)); - } - - .md\:hover\:bg-transparent:hover { - background-color: transparent; - } - - .md\:hover\:text-blue-700:hover { - --tw-text-opacity: 1; - color: rgb(29 78 216 / var(--tw-text-opacity)); - } -} - -@media (min-width: 1024px) { - .lg\:mt-5 { - margin-top: 1.25rem; - } - - .lg\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .lg\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } -} - -.rtl\:space-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 1; -} - -.rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) { - text-align: right; -} - -@media (prefers-color-scheme: dark) { - .dark\:divide-gray-600 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-divide-opacity)); - } - - .dark\:border { - border-width: 1px; - } - - .dark\:border-gray-600 { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); - } - - .dark\:border-gray-700 { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); - } - - .dark\:bg-gray-700 { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); - } - - .dark\:bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); - } - - .dark\:bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity)); - } - - .dark\:bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity)); - } - - .dark\:text-gray-200 { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); - } - - .dark\:text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); - } - - .dark\:text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); - } - - .dark\:text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); - } - - .dark\:text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - } - - .dark\:hover\:bg-gray-600:hover { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); - } - - .dark\:hover\:bg-gray-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); - } - - .dark\:hover\:bg-blue-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity)); - } - - .dark\:hover\:text-white:hover { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - } - - .dark\:focus\:ring-gray-600:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity)); - } - - .dark\:focus\:ring-blue-800:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity)); - } -} - -@media (min-width: 768px) { - @media (prefers-color-scheme: dark) { - .md\:dark\:bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity)); - } - - .md\:dark\:text-blue-500 { - --tw-text-opacity: 1; - color: rgb(59 130 246 / var(--tw-text-opacity)); - } - - .md\:dark\:hover\:bg-transparent:hover { - background-color: transparent; - } - - .md\:dark\:hover\:text-blue-500:hover { - --tw-text-opacity: 1; - color: rgb(59 130 246 / var(--tw-text-opacity)); - } - } -} diff --git a/crates/app/assets/js/alpinejs@3.14.1.min.js b/crates/app/assets/js/alpinejs@3.14.1.min.js deleted file mode 100644 index 2ca4827..0000000 --- a/crates/app/assets/js/alpinejs@3.14.1.min.js +++ /dev/null @@ -1,5 +0,0 @@ -(()=>{var rt=!1,nt=!1,U=[],it=-1;function qt(e){Cn(e)}function Cn(e){U.includes(e)||U.push(e),Tn()}function Ee(e){let t=U.indexOf(e);t!==-1&&t>it&&U.splice(t,1)}function Tn(){!nt&&!rt&&(rt=!0,queueMicrotask(Rn))}function Rn(){rt=!1,nt=!0;for(let e=0;ee.effect(t,{scheduler:r=>{ot?qt(r):r()}}),st=e.raw}function at(e){D=e}function Gt(e){let t=()=>{};return[n=>{let i=D(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),L(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=D(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>L(i)}var Jt=[],Yt=[],Xt=[];function Zt(e){Xt.push(e)}function ee(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Yt.push(t))}function Ae(e){Jt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function ct(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function Qt(e){if(e._x_cleanups)for(;e._x_cleanups.length;)e._x_cleanups.pop()()}var lt=new MutationObserver(pt),ut=!1;function le(){lt.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ut=!0}function ft(){Mn(),lt.disconnect(),ut=!1}var ce=[];function Mn(){let e=lt.takeRecords();ce.push(()=>e.length>0&&pt(e));let t=ce.length;queueMicrotask(()=>{if(ce.length===t)for(;ce.length>0;)ce.shift()()})}function _(e){if(!ut)return e();ft();let t=e();return le(),t}var dt=!1,Se=[];function er(){dt=!0}function tr(){dt=!1,pt(Se),Se=[]}function pt(e){if(dt){Se=Se.concat(e);return}let t=new Set,r=new Set,n=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&r.add(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{ct(s,o)}),n.forEach((o,s)=>{Jt.forEach(a=>a(s,o))});for(let o of r)t.has(o)||Yt.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)r.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Xt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,r=null,n=null,i=null}function Ce(e){return F(j(e))}function P(e,t,r){return e._x_dataStack=[t,...j(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function j(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?j(e.host):e.parentNode?j(e.parentNode):[]}function F(e){return new Proxy({objects:e},Nn)}var Nn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Dn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Dn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>Pn(n,i),s=>mt(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function Pn(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function mt(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),mt(e[t[0]],t.slice(1),r)}}var rr={};function y(e,t){rr[e]=t}function ue(e,t){return Object.entries(rr).forEach(([r,n])=>{let i=null;function o(){if(i)return i;{let[s,a]=_t(t);return i={interceptor:Re,...s},ee(t,a),i}}Object.defineProperty(e,`$${r}`,{get(){return n(t,o())},enumerable:!1})}),e}function nr(e,t,r,...n){try{return r(...n)}catch(i){te(i,e,t)}}function te(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message} - -${r?'Expression: "'+r+`" - -`:""}`,t),setTimeout(()=>{throw e},0)}var Me=!0;function De(e){let t=Me;Me=!1;let r=e();return Me=t,r}function M(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return ir(...e)}var ir=gt;function or(e){ir=e}function gt(e,t){let r={};ue(r,e);let n=[r,...j(e)],i=typeof t=="function"?In(n,t):Ln(n,t,e);return nr.bind(null,e,t,i)}function In(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(F([n,...e]),i);Ne(r,o)}}var ht={};function kn(e,t){if(ht[e])return ht[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return te(s,t,e),Promise.resolve()}})();return ht[e]=o,o}function Ln(e,t,r){let n=kn(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=F([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>te(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>te(l,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>te(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var bt="x-";function C(e=""){return bt+e}function sr(e){bt=e}var Pe={};function d(e,t){return Pe[e]=t,{before(r){if(!Pe[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=W.indexOf(r);W.splice(n>=0?n:W.indexOf("DEFAULT"),0,e)}}}function ar(e){return Object.keys(Pe).includes(e)}function de(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=wt(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(ur((o,s)=>n[o]=s)).filter(dr).map(jn(n,r)).sort(Fn).map(o=>$n(e,o))}function wt(e){return Array.from(e).map(ur()).filter(t=>!dr(t))}var xt=!1,fe=new Map,cr=Symbol();function lr(e){xt=!0;let t=Symbol();cr=t,fe.set(t,[]);let r=()=>{for(;fe.get(t).length;)fe.get(t).shift()();fe.delete(t)},n=()=>{xt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Gt(e);return t.push(i),[{Alpine:B,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:M.bind(M,e)},()=>t.forEach(a=>a())]}function $n(e,t){let r=()=>{},n=Pe[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),xt?fe.get(cr).push(n):n())};return s.runCleanups=o,s}var Ie=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),ke=e=>e;function ur(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=fr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var fr=[];function re(e){fr.push(e)}function dr({name:e}){return pr().test(e)}var pr=()=>new RegExp(`^${bt}([^:^.]+)\\b`);function jn(e,t){return({name:r,value:n})=>{let i=r.match(pr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var yt="DEFAULT",W=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",yt,"teleport"];function Fn(e,t){let r=W.indexOf(e.type)===-1?yt:e.type,n=W.indexOf(t.type)===-1?yt:t.type;return W.indexOf(r)-W.indexOf(n)}function G(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function T(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>T(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)T(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var mr=!1;function _r(){mr&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),mr=!0,document.body||E("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` - - - - - {% block head %}{% endblock %} - - -
- {% block body %}{% endblock %} -
- - -{% endif %} diff --git a/crates/app/src/components/navbar/menu-item.html b/crates/app/src/components/navbar/menu-item.html deleted file mode 100644 index fe0a264..0000000 --- a/crates/app/src/components/navbar/menu-item.html +++ /dev/null @@ -1,18 +0,0 @@ -{% set selected = item.id == current %} -
  • - - {{ item.label }} - -
  • diff --git a/crates/app/src/components/navbar/navbar.html b/crates/app/src/components/navbar/navbar.html deleted file mode 100644 index 227de77..0000000 --- a/crates/app/src/components/navbar/navbar.html +++ /dev/null @@ -1,50 +0,0 @@ -{% macro navbar(current) %} - -{% let items=crate::menu::get_menu_items() %} - - -{% endmacro %} diff --git a/crates/app/src/components/skeletons/card.html b/crates/app/src/components/skeletons/card.html deleted file mode 100644 index 79178da..0000000 --- a/crates/app/src/components/skeletons/card.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - Loading... -
    diff --git a/crates/app/src/components/skeletons/menu-items.html b/crates/app/src/components/skeletons/menu-items.html deleted file mode 100644 index b4fc630..0000000 --- a/crates/app/src/components/skeletons/menu-items.html +++ /dev/null @@ -1,4 +0,0 @@ -
    -
    -
    -
    \ No newline at end of file diff --git a/crates/app/src/components/skeletons/page-title.html b/crates/app/src/components/skeletons/page-title.html deleted file mode 100644 index 0ced82c..0000000 --- a/crates/app/src/components/skeletons/page-title.html +++ /dev/null @@ -1 +0,0 @@ -
    diff --git a/crates/app/src/lib.rs b/crates/app/src/lib.rs deleted file mode 100644 index a04e6ea..0000000 --- a/crates/app/src/lib.rs +++ /dev/null @@ -1,47 +0,0 @@ -use std::path::PathBuf; - -use axum::http::{StatusCode, Uri}; -use axum_htmx::AutoVaryLayer; -use sea_orm::DatabaseConnection; -use thiserror::Error; -use tower_http::services::ServeDir; - -use ::utils::config::{load_config, ConfigError}; - -pub mod db; - -mod menu; -mod pages; - -async fn fallback(uri: Uri) -> (StatusCode, String) { - (StatusCode::NOT_FOUND, format!("No route for {uri}")) -} - -#[derive(Error, Debug)] -pub enum InitError { - #[error(transparent)] - ConfigError(#[from] ConfigError), -} - -pub fn init() -> Result<(), InitError> { - load_config(None)?; - Ok(()) -} - -#[derive(Clone)] -pub struct AppState { - db_connection: DatabaseConnection, -} - -pub async fn get_router(assets_path: PathBuf) -> axum::Router<()> { - let db_connection = db::get_connection().await.unwrap(); - let state: AppState = AppState { db_connection }; - - axum::Router::new() - .nest_service("/assets", ServeDir::new(assets_path)) - .merge(pages::get_routes()) - .fallback(fallback) - .with_state(state) - // The AutoVaryLayer is used to avoid cache issues with htmx (cf: https://github.com/robertwayne/axum-htmx?tab=readme-ov-file#auto-caching-management) - .layer(AutoVaryLayer) -} diff --git a/crates/app/src/main.rs b/crates/app/src/main.rs deleted file mode 100644 index e7ddc98..0000000 --- a/crates/app/src/main.rs +++ /dev/null @@ -1,90 +0,0 @@ -use std::path::{Path, PathBuf}; -use std::{env, io}; - -use axum::body::Body; -use axum::http::Request; -use listenfd::ListenFd; -use notify::Watcher; -use thiserror::Error; -use tokio::net::TcpListener; -use tower_livereload::predicate::Predicate; -use tower_livereload::LiveReloadLayer; - -use ::app::{get_router, init, InitError}; - -#[derive(Error, Debug)] -pub enum AppError { - #[error("Unable to bind to TCP listener")] - TCPListener(#[from] std::io::Error), - #[error("Error with the notify watcher")] - NotifyWatcher(#[from] notify::Error), - #[error("Missing environment variable {var}")] - MissingEnvVar { var: &'static str }, - #[error("Error with the database connection")] - DatabaseConnection(#[from] sea_orm::DbErr), - #[error("Error while initialising the app")] - Initialisation(#[from] InitError), -} - -/// Nous filtrons les requêtes de `htmx` pour ne pas inclure le script _JS_ qui gère le rechargement -/// Voir https://github.com/leotaku/tower-livereload/pull/3 -#[derive(Copy, Clone)] -struct NotHtmxPredicate; -impl Predicate> for NotHtmxPredicate { - fn check(&mut self, req: &Request) -> bool { - !(req.headers().contains_key("hx-request")) - } -} - -const DEFAULT_LISTENER: &str = "localhost:3000"; -async fn get_tcp_listener() -> Result { - let mut listenfd = ListenFd::from_env(); - - match listenfd.take_tcp_listener(0)? { - // if we are given a tcp listener on listen fd 0, we use that one - Some(listener) => { - listener.set_nonblocking(true)?; - Ok(TcpListener::from_std(listener)?) - } - // otherwise fall back to local listening - None => Ok(TcpListener::bind(DEFAULT_LISTENER).await?), - } -} - -fn get_livereload_layer( - templates_paths: Vec, -) -> Result, notify::Error> { - let livereload = LiveReloadLayer::new(); - let reloader = livereload.reloader(); - let mut watcher = notify::recommended_watcher(move |_| reloader.reload())?; - for templates_path in templates_paths { - watcher.watch(templates_path.as_path(), notify::RecursiveMode::Recursive)?; - } - Ok(livereload.request_predicate::(NotHtmxPredicate)) -} - -#[tokio::main] -async fn main() -> Result<(), AppError> { - init()?; - - let manifest_dir = env::var("CARGO_MANIFEST_DIR").map_err(|_| AppError::MissingEnvVar { - var: "CARGO_MANIFEST_DIR", - })?; - let assets_path = Path::new(&manifest_dir).join("assets"); - let templates_paths = vec![ - Path::new(&manifest_dir).join("src/pages"), - Path::new(&manifest_dir).join("src/components"), - ]; - - let livereload_layer = - get_livereload_layer(templates_paths).map_err(AppError::NotifyWatcher)?; - let router = get_router(assets_path).await.layer(livereload_layer); - - let listener: TcpListener = get_tcp_listener().await.map_err(AppError::TCPListener)?; - let local_addr = listener.local_addr().map_err(AppError::TCPListener)?; - println!("Listening on: http://{}", local_addr); - - // Run the server with the router - axum::serve(listener, router.into_make_service()).await?; - Ok(()) -} diff --git a/crates/app/src/menu.rs b/crates/app/src/menu.rs deleted file mode 100644 index dc73752..0000000 --- a/crates/app/src/menu.rs +++ /dev/null @@ -1,28 +0,0 @@ -pub struct MenuItem { - pub id: String, - pub label: String, - pub href: String, -} - -/// Get the menu items -/// This function is the central place to define the menu items -/// It can be used directly in templates, for example in the `navbar` component to render the menu -pub fn get_menu_items() -> Vec { - vec![ - MenuItem { - id: "home".to_string(), - label: "Accueil".to_string(), - href: "/".to_string(), - }, - MenuItem { - id: "cps".to_string(), - label: "CPS".to_string(), - href: "/cps".to_string(), - }, - MenuItem { - id: "debug".to_string(), - label: "DEBUG".to_string(), - href: "/debug".to_string(), - }, - ] -} diff --git a/crates/app/src/pages/cps.html b/crates/app/src/pages/cps.html deleted file mode 100644 index 5e9da53..0000000 --- a/crates/app/src/pages/cps.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "base.html" %} -{% import "navbar/navbar.html" as navbar -%} - -{% block title %}Pharma Libre - CPS{% endblock %} - -{% block body %} -{% call navbar::navbar(current="cps") %} -
    - -
    -
    -
    A
    -
    -
    B
    -
    C
    -
    D
    -
    E
    -
    -
    -
    -
    -{% endblock %} diff --git a/crates/app/src/pages/cps.rs b/crates/app/src/pages/cps.rs deleted file mode 100644 index 2a56bb6..0000000 --- a/crates/app/src/pages/cps.rs +++ /dev/null @@ -1,12 +0,0 @@ -use askama_axum::Template; -use axum_htmx::HxRequest; - -#[derive(Template)] -#[template(path = "cps.html")] -pub struct CpsTemplate { - hx_request: bool, -} - -pub async fn cps(HxRequest(hx_request): HxRequest) -> CpsTemplate { - CpsTemplate { hx_request } -} diff --git a/crates/app/src/pages/debug.html b/crates/app/src/pages/debug.html deleted file mode 100644 index 8b35d9c..0000000 --- a/crates/app/src/pages/debug.html +++ /dev/null @@ -1,72 +0,0 @@ -{% extends "base.html" %} -{% import "navbar/navbar.html" as navbar -%} - -{% block title %}Pharma Libre - Debug{% endblock %} - -{% block body %} -{% call navbar::navbar(current="debug") %} -
    - -
    -
    -
    -
    -

    - Base de données -

    -

    - Données extraites de la base de donnée à des fins de debug -

    - - - - - - - - - - - - - - - - - -
    - ID - - Value -
    - db_ping_status - - {{ db_ping_status }} -
    - debug_entries_count - - {{ debug_entries_count }} -
    -
    - -
    -
    -
    -
    -
    -
    -{% endblock %} \ No newline at end of file diff --git a/crates/app/src/pages/debug.rs b/crates/app/src/pages/debug.rs deleted file mode 100644 index 5b505da..0000000 --- a/crates/app/src/pages/debug.rs +++ /dev/null @@ -1,48 +0,0 @@ -use askama_axum::Template; -use axum::{extract::State, routing}; - -use ::entity::{debug, debug::Entity as DebugEntity}; -use axum_htmx::HxRequest; -use sea_orm::*; - -use crate::AppState; - -async fn get_debug_entries(db: &DatabaseConnection) -> Result, DbErr> { - DebugEntity::find().all(db).await -} - -async fn add_random_debug_entry(State(AppState { db_connection }): State) { - let random_entry = debug::ActiveModel { - title: Set("Random title".to_string()), - text: Set("Random text".to_string()), - ..Default::default() - }; - random_entry.insert(&db_connection).await.unwrap(); -} - -#[derive(Template)] -#[template(path = "debug.html")] -struct GetDebugTemplate { - hx_request: bool, - db_ping_status: bool, - debug_entries_count: usize, -} - -async fn debug( - HxRequest(hx_request): HxRequest, - State(AppState { db_connection }): State, -) -> GetDebugTemplate { - let db_ping_status = db_connection.ping().await.is_ok(); - let debug_entries = get_debug_entries(&db_connection).await.unwrap(); - GetDebugTemplate { - hx_request, - db_ping_status, - debug_entries_count: debug_entries.len(), - } -} - -pub fn get_routes() -> axum::Router { - axum::Router::new() - .route("/", routing::get(debug)) - .route("/add_random", routing::post(add_random_debug_entry)) -} diff --git a/crates/app/src/pages/home.html b/crates/app/src/pages/home.html deleted file mode 100644 index abe6fd4..0000000 --- a/crates/app/src/pages/home.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "base.html" %} -{% import "navbar/navbar.html" as navbar -%} - -{% block title %}Pharma Libre - Accueil{% endblock %} - -{% block body %} -{% call navbar::navbar(current="home") %} -
    - -
    -
    -
    -
    A
    -
    B
    -
    C
    -
    D
    -
    -
    E
    -
    -
    -
    -{% endblock %} diff --git a/crates/app/src/pages/home.rs b/crates/app/src/pages/home.rs deleted file mode 100644 index 150cf22..0000000 --- a/crates/app/src/pages/home.rs +++ /dev/null @@ -1,12 +0,0 @@ -use askama_axum::Template; -use axum_htmx::HxRequest; - -#[derive(Template)] -#[template(path = "home.html")] -pub struct GetHomeTemplate { - hx_request: bool, -} - -pub async fn home(HxRequest(hx_request): HxRequest) -> GetHomeTemplate { - GetHomeTemplate { hx_request } -} diff --git a/crates/app/src/pages/mod.rs b/crates/app/src/pages/mod.rs deleted file mode 100644 index 24fd408..0000000 --- a/crates/app/src/pages/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -use axum::{routing, Router}; - -use crate::AppState; - -mod cps; -mod debug; -mod home; - -pub fn get_routes() -> Router { - Router::new() - .route("/", routing::get(home::home)) - .route("/cps", routing::get(cps::cps)) - .nest("/debug", debug::get_routes()) -} diff --git a/crates/app/tailwind.config.js b/crates/app/tailwind.config.js deleted file mode 100644 index 1c13bfe..0000000 --- a/crates/app/tailwind.config.js +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - './src/**/*.html', - './css/**/*.css', - ], - theme: { - extend: {}, - }, - plugins: [], -} - From 8700354ad2e17ae6ce523bd1793d2fb6557a9add Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 17:54:02 +0200 Subject: [PATCH 10/12] feat: fix CORS --- Cargo.lock | 15 +++++++++++++++ README.md | 2 +- crates/backend/Cargo.toml | 1 + crates/backend/README.md | 2 +- crates/backend/src/lib.rs | 11 +++++++++-- crates/backend/src/main.rs | 2 +- 6 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0fa745a..44aeb37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -573,6 +573,7 @@ dependencies = [ "systemfd", "thiserror", "tokio", + "tower-http", "utils", ] @@ -6344,6 +6345,20 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "http", + "pin-project-lite", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" diff --git a/README.md b/README.md index 3d2fd2f..9f124e6 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Pour lancer l'application en mode développement, il est nécessaire d'exécuter ```bash # Lancement du serveur backend -systemfd --no-pid -s http::3030 -- cargo watch -x 'run --bin backend' +systemfd --no-pid -s http::8080 -- cargo watch -x 'run --bin backend' ``` ```bash diff --git a/crates/backend/Cargo.toml b/crates/backend/Cargo.toml index 0ceef47..554d858 100644 --- a/crates/backend/Cargo.toml +++ b/crates/backend/Cargo.toml @@ -21,6 +21,7 @@ thiserror.workspace = true entity = { path = "../../entity" } migration = { path = "../../migration" } utils = { path = "../utils" } +tower-http = { version = "0.6.1", features = ["cors"] } [dev-dependencies] cargo-watch = "8.5.2" diff --git a/crates/backend/README.md b/crates/backend/README.md index 97281a4..9799587 100644 --- a/crates/backend/README.md +++ b/crates/backend/README.md @@ -24,5 +24,5 @@ ln -s ../../.env .env Pour lancer le serveur en mode développement, exécutez la commande suivante : ```bash -systemfd --no-pid -s http::3030 -- cargo watch -x 'run --bin backend' +systemfd --no-pid -s http::8080 -- cargo watch -x 'run --bin backend' ``` diff --git a/crates/backend/src/lib.rs b/crates/backend/src/lib.rs index c9423b9..2ffaa8b 100644 --- a/crates/backend/src/lib.rs +++ b/crates/backend/src/lib.rs @@ -1,9 +1,10 @@ use anyhow::Error as AnyError; -use axum::http::{StatusCode, Uri}; +use axum::http::{header, StatusCode, Uri}; use axum::response::{IntoResponse, Response}; use axum::{routing::get, Router}; use sea_orm::{DatabaseConnection, DbErr}; use thiserror::Error; +use tower_http::cors::{Any, CorsLayer}; use ::utils::config::{load_config, ConfigError}; @@ -30,11 +31,17 @@ pub async fn get_router() -> Result { let db_connection = db::get_connection().await?; let state: AppState = AppState { db_connection }; + let cors = CorsLayer::new() + .allow_methods(Any) + .allow_origin(Any) + .allow_headers([header::CONTENT_TYPE]); + Ok(Router::new() .route("/", get(|| async { "Hello, world!" })) .merge(api::get_routes()) .fallback(fallback) - .with_state(state)) + .with_state(state) + .layer(cors)) } async fn fallback(uri: Uri) -> (StatusCode, String) { diff --git a/crates/backend/src/main.rs b/crates/backend/src/main.rs index 840e751..97c9b59 100644 --- a/crates/backend/src/main.rs +++ b/crates/backend/src/main.rs @@ -32,7 +32,7 @@ async fn main() -> Result<(), BackendError> { }; let local_addr = listener.local_addr()?; - println!("Listening on {}", local_addr); + println!("Listening on http://{}", local_addr); axum::serve(listener, app).await?; Ok(()) From 2ded18692d10c00c784c311d7ccfda74e5701f16 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 24 Sep 2024 17:55:34 +0200 Subject: [PATCH 11/12] feat: add a debug page calling database debug functions from the backend --- frontend/app.vue | 1 + frontend/components/NavBar.vue | 1 + frontend/pages/debug.vue | 67 ++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 frontend/pages/debug.vue diff --git a/frontend/app.vue b/frontend/app.vue index 14f2730..ad031fa 100644 --- a/frontend/app.vue +++ b/frontend/app.vue @@ -1,5 +1,6 @@