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