FromAnyRow

Derive Macro FromAnyRow 

Source
#[derive(FromAnyRow)]
Expand description

Derives the FromRow trait for AnyRow and the AnyImpl trait.

This procedural macro generates an implementation of sqlx::FromRow<'r, sqlx::any::AnyRow> for the target struct, allowing it to be scanned directly from database results when using sqlx::Any driver (which Bottle ORM uses internally).

It also implements the AnyImpl trait, which provides necessary column metadata used by the QueryBuilder for dynamic query construction.

§Features

  • Automatic Field Mapping: Maps database columns to struct fields by name.
  • DateTime Handling: Includes special logic to handle DateTime types, often required when dealing with the Any driver’s type erasure or JSON serialization fallback.
  • Metadata Generation: Automatically generates AnyInfo for each field.

§Requirements

The struct must have named fields. Tuple structs and unit structs are not supported.

§Example

use bottle_orm::{FromAnyRow, AnyImpl};
use chrono::{DateTime, Utc};

#[derive(FromAnyRow)]
struct UserCount {
    count: i64,
    last_active: DateTime<Utc>,
}

// Usage with QueryBuilder:
// let stats: UserCount = db.model::<User>().select("count(*), last_active").first().await?;