use std::any::Any;
use vantage_core::Result;
pub mod contained;
pub mod many;
pub mod one;
pub use contained::ContainedRelation;
pub use many::HasMany;
pub use one::HasOne;
pub trait Reference: Send + Sync {
fn columns(&self, source_id: &str, target_id: &str) -> (String, String);
fn vista_reference(
&self,
name: &str,
target: String,
source_id: &str,
) -> vantage_vista::Reference;
fn build_target(&self, data_source: &dyn Any) -> Result<Box<dyn Any>>;
fn build_target_erased(&self, data_source: &dyn Any) -> Result<Box<dyn Any>>;
fn resolve_from_row(
&self,
data_source: &dyn Any,
source_id_field: &str,
source_row: &dyn Any,
) -> Result<Box<dyn Any>>;
fn target_table_name(&self, data_source: &dyn Any) -> String;
}