Skip to main content

easy_sql/traits/
output.rs

1use easy_macros::always_context;
2use sqlx::Executor;
3
4use crate::Driver;
5
6use super::DriverArguments;
7
8#[always_context]
9#[async_trait::async_trait]
10/// Conversion helper used by [`Output`].
11///
12/// Driver integrations provide implementations for their row types.
13pub trait ToConvert<D: Driver> {
14    async fn get<'a>(
15        exec: impl Executor<'_, Database = D::InternalDriver>,
16        query: sqlx::query::Query<'a, D::InternalDriver, DriverArguments<'a, D>>,
17    ) -> anyhow::Result<Self>
18    where
19        Self: Sized;
20}
21
22#[always_context]
23/// Output mapping for query results.
24///
25/// Prefer implementing this trait via the [`Output`](macro@crate::Output) derive macro; manual
26/// implementations may need updates across releases.
27pub trait Output<Table, D: Driver>: Sized {
28    type DataToConvert: ToConvert<D>;
29    type UsedForChecks;
30
31    fn select(current_query: &mut String);
32    fn convert(data: Self::DataToConvert) -> anyhow::Result<Self>;
33}