rust_ef/query/source.rs
1//! Query source traits.
2//!
3//! `LinqSource` is a marker trait implemented by query source types
4//! (`QueryBuilder<T>`, `DbSet<T>`) so the `linq!` macro can accept untyped
5//! closures when the source carries entity type information.
6//!
7//! `IQueryable` is the trait representing a queryable data source.
8
9use crate::entity::IEntityType;
10
11use super::builder::QueryBuilder;
12
13/// Marker trait implemented by query source types (`QueryBuilder<T>`, `DbSet<T>`).
14///
15/// `LinqSource` enables the `linq!` macro to accept untyped closures
16/// (`|b| ...`) when the source expression carries entity type information
17/// via turbofish (e.g. `ctx.set::<Blog>()`). The macro extracts the type
18/// from the source and generates a typed closure internally.
19pub trait LinqSource {}
20
21impl<T: IEntityType> LinqSource for QueryBuilder<T> {}
22impl<T: IEntityType> LinqSource for crate::db_set::DbSet<T> {}
23
24/// Trait representing a queryable data source.
25pub trait IQueryable<T: IEntityType> {
26 fn query(&self) -> QueryBuilder<T>;
27}