| .. | ||
| src | ||
| Cargo.toml | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| README.md | ||
🧭 Sobre PageTop
PageTop es un entorno de desarrollo que reivindica la esencia de la web clásica para crear soluciones web SSR (renderizadas en el servidor) modulares, extensibles y configurables, basadas en HTML, CSS y JavaScript.
⚡️ Guía rápida
Añade la dependencia a tu Cargo.toml activando el motor de base de datos que necesites:
[dependencies]
pagetop-seaorm = { version = "...", features = ["sqlite"] }
Las features disponibles son mysql, postgres y sqlite.
Configura la conexión en el archivo de configuración de la aplicación:
[database]
db_type = "sqlite"
db_name = "my_app.db"
max_pool_size = 5
Para MySQL o PostgreSQL añade también db_user, db_pass, db_host y db_port.
Declara la extensión en tu aplicación o en la extensión que la requiera:
use pagetop::prelude::*;
struct MyApp;
impl Extension for MyApp {
fn dependencies(&self) -> Vec<ExtensionRef> {
vec![
&pagetop_seaorm::SeaORM,
]
}
fn initialize(&self) {
install_migrations!(m20240101_000001_create_users_table);
}
}
#[pagetop::main]
async fn main() -> std::io::Result<()> {
Application::prepare(&MyApp).run()?.await
}
Escribe las migraciones usando la API de SeaORM:
use pagetop_seaorm::prelude::*;
#[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_auto(Users::Table)
.col(pk_auto(Users::Id))
.col(string_uniq(Users::Email))
.to_owned(),
)
.await
}
}
#[derive(DeriveIden)]
enum Users {
Table,
Id,
Email,
}
📚 Créditos
Este crate se apoya en bibliotecas del ecosistema SeaQL como:
-
SeaORM, ORM asíncrono que usa internamente SQLx para el acceso y la ejecución de consultas a la base de datos.
-
SeaQuery, generador de consultas SQL sobre el que se construye el motor de migraciones y los helpers de esquema.
-
sea-schema, librería de introspección de esquemas SQL, usada por el módulo de migraciones para interrogar la estructura real de la base de datos (tablas, columnas, índices y claves externas).
También incorpora código adaptado de las siguientes fuentes:
-
sea-orm-migration (v1.0.0): El módulo de migraciones (
src/db/migration/) es una versión personalizada de sea-orm-migration. Se integra directamente en lugar de usarlo como dependencia porque su paradigma de CLI no es compatible con el ciclo de vida de las extensiones de PageTop, donde las migraciones deben ejecutarse durante la inicialización de cada extensión. Los ficheros adaptados del original son:Original en sea-orm-migrationObservaciones lib.rsExcluye módulos y exportaciones del CLI connection.rsIntegración completa manager.rsIntegración completa migrator.rsOmite la gestión de errores del CLI prelude.rsExcluye exportaciones del CLI seaql_migrations.rsIntegración completa -
loco-rs/loco: El módulo
src/db/migration/schema.rs, con funciones de ayuda para definir columnas de tablas de forma ergonómica, está adaptado del ficherosrc/schema.rsdel proyecto Loco.
🚧 Advertencia
PageTop es un proyecto personal para aprender Rust y conocer su ecosistema. Su API está sujeta a cambios frecuentes. No se recomienda su uso en producción, al menos hasta que se libere la versión 1.0.0.
📜 Licencia
El código está disponible bajo una doble licencia:
-
Licencia MIT (LICENSE-MIT o también https://opensource.org/licenses/MIT)
-
Licencia Apache, Versión 2.0 (LICENSE-APACHE o también https://www.apache.org/licenses/LICENSE-2.0)
Puedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en el ecosistema Rust.