use std::any::Any;
use vantage_core::Result;
use crate::any::AnyTable;
pub mod many;
pub mod one;
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 build_target(&self, data_source: &dyn Any) -> Box<dyn Any>;
fn cardinality(&self) -> vantage_vista::ReferenceKind;
fn resolve_from_row(
&self,
data_source: &dyn Any,
source_id_field: &str,
source_row: &dyn Any,
) -> Result<Box<dyn Any>>;
fn resolve_as_any(&self, source_table: &dyn Any) -> Result<AnyTable>;
fn target_type_name(&self) -> &'static str;
}