Skip to main content

reifydb_routine/function/math/
euler.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use std::f64::consts::E;
5
6use reifydb_core::value::column::{ColumnWithName, buffer::ColumnBuffer, columns::Columns};
7use reifydb_type::value::r#type::Type;
8
9use crate::routine::{Function, FunctionKind, Routine, RoutineInfo, context::FunctionContext, error::RoutineError};
10
11pub struct Euler {
12	info: RoutineInfo,
13}
14
15impl Default for Euler {
16	fn default() -> Self {
17		Self::new()
18	}
19}
20
21impl Euler {
22	pub fn new() -> Self {
23		Self {
24			info: RoutineInfo::new("math::e"),
25		}
26	}
27}
28
29impl<'a> Routine<FunctionContext<'a>> for Euler {
30	fn info(&self) -> &RoutineInfo {
31		&self.info
32	}
33
34	fn return_type(&self, _input_types: &[Type]) -> Type {
35		Type::Float8
36	}
37
38	fn execute(&self, ctx: &mut FunctionContext<'a>, args: &Columns) -> Result<Columns, RoutineError> {
39		if !args.is_empty() {
40			return Err(RoutineError::FunctionArityMismatch {
41				function: ctx.fragment.clone(),
42				expected: 0,
43				actual: args.len(),
44			});
45		}
46
47		Ok(Columns::new(vec![ColumnWithName::new(ctx.fragment.clone(), ColumnBuffer::float8(vec![E]))]))
48	}
49}
50
51impl Function for Euler {
52	fn kinds(&self) -> &[FunctionKind] {
53		&[FunctionKind::Scalar]
54	}
55}