macro_rules! scopes {
(
$trait_name:ident for $model:ty {
$(
fn $scope:ident ( $q:ident $(, $arg:ident : $arg_ty:ty )* )
-> $body:expr
);* $(;)?
}
) => { ... };
}Expand description
Define chainable Eloquent-style local scopes on a model’s query builder.
Mirrors Laravel’s scopeActive($query) / scopePublished($query) pattern.
Generates a user-named trait and an impl for QueryBuilder<Model> so
scopes chain directly: User::query().active().verified().get(pool).
§Usage
ⓘ
use anvilforge::cast::scopes;
scopes!(UserScopes for User {
fn active(q) -> q.where_eq(User::columns().active(), true);
fn verified(q) -> q.where_not_null(User::columns().email_verified_at());
fn older_than(q, days: i32) -> q.where_lt(User::columns().created_at(), cutoff(days));
});
// In handler code:
use crate::app::Models::UserScopes;
let active_verified = User::query().active().verified().get(pool).await?;