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