polars_plan/dsl/expr/
named_serde.rs1use std::sync::{Arc, LazyLock, RwLock};
2
3use super::{ColumnsUdf, FunctionOutputField};
4
5pub trait ExprRegistry: Sync + Send {
8 fn get_function(&self, name: &str, payload: &[u8]) -> Option<Arc<dyn ColumnsUdf>>;
9
10 fn get_output(&self, name: &str) -> Option<Arc<dyn FunctionOutputField>>;
11}
12
13pub(super) static NAMED_SERDE_REGISTRY_EXPR: LazyLock<RwLock<Option<Arc<dyn ExprRegistry>>>> =
14 LazyLock::new(Default::default);
15
16pub fn set_named_serde_registry(reg: Arc<dyn ExprRegistry>) {
17 let mut lock = NAMED_SERDE_REGISTRY_EXPR.write().unwrap();
18 *lock = Some(reg);
19}