1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::from_row::FromRow;

use super::Join;
use crate::keyed::Keyed;

use crate::{error::ToqlError, sql_builder::select_stream::Select};

impl<T, R, E> FromRow<R, E> for Join<T>
where
    T: Keyed + FromRow<R, E>,
    E: std::convert::From<ToqlError>,
{
    fn forward<'a, I>(iter: &mut I) -> Result<usize, E>
    where
        I: Iterator<Item = &'a Select>,
        Self: std::marker::Sized,
    {
        <T as FromRow<R, E>>::forward(iter)
    }
    fn from_row<'a, I>(row: &R, i: &mut usize, iter: &mut I) -> Result<Option<Self>, E>
    where
        I: Iterator<Item = &'a Select> + Clone,
        Self: Sized,
    {
        Ok(<T as FromRow<R, E>>::from_row(row, i, iter)?.map(|e| Join::Entity(Box::new(e))))
    }
}