kosame_repr 0.2.1

Macro-based Rust ORM focused on developer ergonomics
Documentation
use super::*;

pub struct Relation<'a> {
    name: &'a str,
    source_table: &'a str,
    source_columns: &'a [&'a Column<'a>],
    target_table: &'a str,
    target_columns: &'a [&'a Column<'a>],
}

impl<'a> Relation<'a> {
    pub const fn new(
        name: &'a str,
        source_table: &'a str,
        source_columns: &'a [&'a Column],
        target_table: &'a str,
        target_columns: &'a [&'a Column],
    ) -> Self {
        Self {
            name,
            source_table,
            source_columns,
            target_table,
            target_columns,
        }
    }

    #[inline]
    pub const fn name(&self) -> &str {
        self.name
    }

    #[inline]
    pub const fn source_table(&self) -> &str {
        self.source_table
    }

    #[inline]
    pub const fn source_columns(&self) -> &[&Column<'_>] {
        self.source_columns
    }

    #[inline]
    pub const fn target_table(&self) -> &str {
        self.target_table
    }

    #[inline]
    pub const fn target_columns(&self) -> &[&Column<'_>] {
        self.target_columns
    }

    #[inline]
    pub fn column_pairs(&self) -> impl Iterator<Item = (&Column<'_>, &Column<'_>)> {
        self.source_columns
            .iter()
            .zip(self.target_columns)
            .map(|(a, b)| (*a, *b))
    }
}