pub use openlineage_client::OpenLineageConfig;
pub const DATAFUSION_PRODUCER: &str =
"https://github.com/open-lakehouse/headwaters/datafusion-openlineage";
pub trait DataFusionConfig {
fn for_datafusion() -> Self;
fn for_datafusion_from_env() -> Self;
}
impl DataFusionConfig for OpenLineageConfig {
fn for_datafusion() -> Self {
stamp_datafusion(OpenLineageConfig {
producer: DATAFUSION_PRODUCER.to_string(),
..OpenLineageConfig::with_env(None, None)
})
}
fn for_datafusion_from_env() -> Self {
stamp_datafusion(OpenLineageConfig {
producer: DATAFUSION_PRODUCER.to_string(),
..OpenLineageConfig::from_env()
})
}
}
fn stamp_datafusion(mut cfg: OpenLineageConfig) -> OpenLineageConfig {
cfg.engine_name = "DataFusion".to_string();
cfg.engine_version = datafusion::DATAFUSION_VERSION.to_string();
cfg
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn datafusion_identity_is_stable() {
let cfg = OpenLineageConfig::for_datafusion();
assert_eq!(cfg.producer, DATAFUSION_PRODUCER);
assert_eq!(cfg.engine_name, "DataFusion");
assert!(!cfg.engine_version.is_empty());
}
}