datafusion_python/expr/
higher_order_function.rs1use std::fmt::{self, Display, Formatter};
19
20use datafusion::logical_expr::expr::HigherOrderFunction;
21use pyo3::prelude::*;
22
23use super::PyExpr;
24
25#[pyclass(
26 from_py_object,
27 frozen,
28 name = "HigherOrderFunction",
29 module = "datafusion.expr",
30 subclass
31)]
32#[derive(Clone)]
33pub struct PyHigherOrderFunction {
34 higher_order: HigherOrderFunction,
35}
36
37impl From<HigherOrderFunction> for PyHigherOrderFunction {
38 fn from(higher_order: HigherOrderFunction) -> PyHigherOrderFunction {
39 PyHigherOrderFunction { higher_order }
40 }
41}
42
43impl From<PyHigherOrderFunction> for HigherOrderFunction {
44 fn from(higher_order: PyHigherOrderFunction) -> Self {
45 higher_order.higher_order
46 }
47}
48
49impl Display for PyHigherOrderFunction {
50 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
51 write!(
52 f,
53 "HigherOrderFunction(name={}, args={:?})",
54 self.higher_order.name(),
55 &self.higher_order.args,
56 )
57 }
58}
59
60#[pymethods]
61impl PyHigherOrderFunction {
62 fn name(&self) -> String {
64 self.higher_order.name().to_string()
65 }
66
67 fn args(&self) -> Vec<PyExpr> {
70 self.higher_order
71 .args
72 .iter()
73 .map(|e| PyExpr::from(e.clone()))
74 .collect()
75 }
76
77 fn __repr__(&self) -> PyResult<String> {
78 Ok(format!("HigherOrderFunction({self})"))
79 }
80
81 fn __name__(&self) -> PyResult<String> {
82 Ok("HigherOrderFunction".to_string())
83 }
84}