vortex_array/scalar_fn/
plugin.rs1use std::fmt::Debug;
5use std::sync::Arc;
6
7use vortex_error::VortexResult;
8use vortex_session::VortexSession;
9
10use crate::scalar_fn::ScalarFn;
11use crate::scalar_fn::ScalarFnId;
12use crate::scalar_fn::ScalarFnRef;
13use crate::scalar_fn::ScalarFnVTable;
14
15pub type ScalarFnPluginRef = Arc<dyn ScalarFnPlugin>;
17
18pub trait ScalarFnPlugin: 'static + Send + Sync {
26 fn id(&self) -> ScalarFnId;
28
29 fn deserialize(&self, metadata: &[u8], session: &VortexSession) -> VortexResult<ScalarFnRef>;
31}
32
33impl Debug for dyn ScalarFnPlugin {
34 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35 f.debug_tuple("ScalarFnPlugin").field(&self.id()).finish()
36 }
37}
38
39impl<V: ScalarFnVTable> ScalarFnPlugin for V {
40 fn id(&self) -> ScalarFnId {
41 ScalarFnVTable::id(self)
42 }
43
44 fn deserialize(&self, metadata: &[u8], session: &VortexSession) -> VortexResult<ScalarFnRef> {
45 let options = ScalarFnVTable::deserialize(self, metadata, session)?;
46 Ok(ScalarFn::new(self.clone(), options).erased())
47 }
48}