Skip to main content

reifydb_routine/function/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4pub mod blob;
5pub mod clock;
6pub mod date;
7pub mod datetime;
8pub mod duration;
9pub mod flow;
10pub mod identity;
11pub mod is;
12pub mod json;
13pub mod math;
14pub mod meta;
15pub mod rql;
16pub mod series;
17pub mod text;
18pub mod time;
19pub mod uuid;
20
21use std::sync::Arc;
22
23use crate::{
24	function::uuid::{v4::UuidV4, v7::UuidV7},
25	routine::registry::RoutinesConfigurator,
26};
27
28/// Register all built-in native functions directly into a `Routines` builder.
29pub fn default_native_functions(builder: RoutinesConfigurator) -> RoutinesConfigurator {
30	builder.register_builtin_function(Arc::new(math::sum::Sum::new()))
31		.register_builtin_function(Arc::new(math::avg::Avg::new()))
32		.register_builtin_function(Arc::new(math::count::Count::new()))
33		.register_builtin_function(Arc::new(math::min::Min::new()))
34		.register_builtin_function(Arc::new(math::max::Max::new()))
35		.register_builtin_function(Arc::new(math::abs::Abs::new()))
36		.register_builtin_function(Arc::new(flow::to_json::FlowNodeToJson::new()))
37		.register_builtin_function(Arc::new(clock::now::Now::new()))
38		.register_builtin_function(Arc::new(blob::b58::BlobB58::new()))
39		.register_builtin_function(Arc::new(blob::b64::BlobB64::new()))
40		.register_builtin_function(Arc::new(blob::b64url::BlobB64url::new()))
41		.register_builtin_function(Arc::new(blob::hex::BlobHex::new()))
42		.register_builtin_function(Arc::new(blob::utf8::BlobUtf8::new()))
43		.register_builtin_function(Arc::new(math::acos::Acos::new()))
44		.register_builtin_function(Arc::new(math::asin::Asin::new()))
45		.register_builtin_function(Arc::new(math::atan::Atan::new()))
46		.register_builtin_function(Arc::new(math::atan2::Atan2::new()))
47		.register_builtin_function(Arc::new(math::ceil::Ceil::new()))
48		.register_builtin_function(Arc::new(math::clamp::Clamp::new()))
49		.register_builtin_function(Arc::new(math::cos::Cos::new()))
50		.register_builtin_function(Arc::new(math::euler::Euler::new()))
51		.register_builtin_function(Arc::new(math::exp::Exp::new()))
52		.register_builtin_function(Arc::new(math::floor::Floor::new()))
53		.register_builtin_function(Arc::new(math::gcd::Gcd::new()))
54		.register_builtin_function(Arc::new(math::lcm::Lcm::new()))
55		.register_builtin_function(Arc::new(math::log::Log::new()))
56		.register_builtin_function(Arc::new(math::log10::Log10::new()))
57		.register_builtin_function(Arc::new(math::log2::Log2::new()))
58		.register_builtin_function(Arc::new(math::modulo::Modulo::new()))
59		.register_builtin_function(Arc::new(math::pi::Pi::new()))
60		.register_builtin_function(Arc::new(math::power::Power::new()))
61		.register_builtin_function(Arc::new(math::round::Round::new()))
62		.register_builtin_function(Arc::new(math::sign::Sign::new()))
63		.register_builtin_function(Arc::new(math::sin::Sin::new()))
64		.register_builtin_function(Arc::new(math::sqrt::Sqrt::new()))
65		.register_builtin_function(Arc::new(math::tan::Tan::new()))
66		.register_builtin_function(Arc::new(math::truncate::Truncate::new()))
67		.register_builtin_function(Arc::new(date::year::DateYear::new()))
68		.register_builtin_function(Arc::new(date::month::DateMonth::new()))
69		.register_builtin_function(Arc::new(date::day::DateDay::new()))
70		.register_builtin_function(Arc::new(date::day_of_year::DateDayOfYear::new()))
71		.register_builtin_function(Arc::new(date::day_of_week::DateDayOfWeek::new()))
72		.register_builtin_function(Arc::new(date::quarter::DateQuarter::new()))
73		.register_builtin_function(Arc::new(date::week::DateWeek::new()))
74		.register_builtin_function(Arc::new(date::is_leap_year::DateIsLeapYear::new()))
75		.register_builtin_function(Arc::new(date::days_in_month::DateDaysInMonth::new()))
76		.register_builtin_function(Arc::new(date::end_of_month::DateEndOfMonth::new()))
77		.register_builtin_function(Arc::new(date::start_of_month::DateStartOfMonth::new()))
78		.register_builtin_function(Arc::new(date::start_of_year::DateStartOfYear::new()))
79		.register_builtin_function(Arc::new(date::new::DateNew::new()))
80		.register_builtin_function(Arc::new(date::now::DateNow::new()))
81		.register_builtin_function(Arc::new(date::add::DateAdd::new()))
82		.register_builtin_function(Arc::new(date::subtract::DateSubtract::new()))
83		.register_builtin_function(Arc::new(date::diff::DateDiff::new()))
84		.register_builtin_function(Arc::new(date::trunc::DateTrunc::new()))
85		.register_builtin_function(Arc::new(date::age::DateAge::new()))
86		.register_builtin_function(Arc::new(date::format::DateFormat::new()))
87		.register_builtin_function(Arc::new(time::hour::TimeHour::new()))
88		.register_builtin_function(Arc::new(time::minute::TimeMinute::new()))
89		.register_builtin_function(Arc::new(time::second::TimeSecond::new()))
90		.register_builtin_function(Arc::new(time::nanosecond::TimeNanosecond::new()))
91		.register_builtin_function(Arc::new(time::new::TimeNew::new()))
92		.register_builtin_function(Arc::new(time::now::TimeNow::new()))
93		.register_builtin_function(Arc::new(time::add::TimeAdd::new()))
94		.register_builtin_function(Arc::new(time::subtract::TimeSubtract::new()))
95		.register_builtin_function(Arc::new(time::diff::TimeDiff::new()))
96		.register_builtin_function(Arc::new(time::trunc::TimeTrunc::new()))
97		.register_builtin_function(Arc::new(time::age::TimeAge::new()))
98		.register_builtin_function(Arc::new(time::format::TimeFormat::new()))
99		.register_builtin_function(Arc::new(datetime::year::DateTimeYear::new()))
100		.register_builtin_function(Arc::new(datetime::month::DateTimeMonth::new()))
101		.register_builtin_function(Arc::new(datetime::day::DateTimeDay::new()))
102		.register_builtin_function(Arc::new(datetime::hour::DateTimeHour::new()))
103		.register_builtin_function(Arc::new(datetime::minute::DateTimeMinute::new()))
104		.register_builtin_function(Arc::new(datetime::second::DateTimeSecond::new()))
105		.register_builtin_function(Arc::new(datetime::nanosecond::DateTimeNanosecond::new()))
106		.register_builtin_function(Arc::new(datetime::day_of_year::DateTimeDayOfYear::new()))
107		.register_builtin_function(Arc::new(datetime::day_of_week::DateTimeDayOfWeek::new()))
108		.register_builtin_function(Arc::new(datetime::quarter::DateTimeQuarter::new()))
109		.register_builtin_function(Arc::new(datetime::week::DateTimeWeek::new()))
110		.register_builtin_function(Arc::new(datetime::date::DateTimeDate::new()))
111		.register_builtin_function(Arc::new(datetime::time::DateTimeTime::new()))
112		.register_builtin_function(Arc::new(datetime::epoch::DateTimeEpoch::new()))
113		.register_builtin_function(Arc::new(datetime::epoch_millis::DateTimeEpochMillis::new()))
114		.register_builtin_function(Arc::new(datetime::new::DateTimeNew::new()))
115		.register_builtin_function(Arc::new(datetime::now::DateTimeNow::new()))
116		.register_builtin_function(Arc::new(datetime::from_epoch::DateTimeFromEpoch::new()))
117		.register_builtin_function(Arc::new(datetime::from_epoch_millis::DateTimeFromEpochMillis::new()))
118		.register_builtin_function(Arc::new(datetime::add::DateTimeAdd::new()))
119		.register_builtin_function(Arc::new(datetime::subtract::DateTimeSubtract::new()))
120		.register_builtin_function(Arc::new(datetime::diff::DateTimeDiff::new()))
121		.register_builtin_function(Arc::new(datetime::trunc::DateTimeTrunc::new()))
122		.register_builtin_function(Arc::new(datetime::age::DateTimeAge::new()))
123		.register_builtin_function(Arc::new(datetime::format::DateTimeFormat::new()))
124		.register_builtin_function(Arc::new(duration::years::DurationYears::new()))
125		.register_builtin_function(Arc::new(duration::months::DurationMonths::new()))
126		.register_builtin_function(Arc::new(duration::weeks::DurationWeeks::new()))
127		.register_builtin_function(Arc::new(duration::days::DurationDays::new()))
128		.register_builtin_function(Arc::new(duration::hours::DurationHours::new()))
129		.register_builtin_function(Arc::new(duration::minutes::DurationMinutes::new()))
130		.register_builtin_function(Arc::new(duration::seconds::DurationSeconds::new()))
131		.register_builtin_function(Arc::new(duration::millis::DurationMillis::new()))
132		.register_builtin_function(Arc::new(duration::get_months::DurationGetMonths::new()))
133		.register_builtin_function(Arc::new(duration::get_days::DurationGetDays::new()))
134		.register_builtin_function(Arc::new(duration::get_nanos::DurationGetNanos::new()))
135		.register_builtin_function(Arc::new(duration::add::DurationAdd::new()))
136		.register_builtin_function(Arc::new(duration::subtract::DurationSubtract::new()))
137		.register_builtin_function(Arc::new(duration::negate::DurationNegate::new()))
138		.register_builtin_function(Arc::new(duration::scale::DurationScale::new()))
139		.register_builtin_function(Arc::new(duration::trunc::DurationTrunc::new()))
140		.register_builtin_function(Arc::new(duration::format::DurationFormat::new()))
141		.register_builtin_function_alias("duration::year", "duration::years")
142		.register_builtin_function_alias("duration::month", "duration::months")
143		.register_builtin_function_alias("duration::week", "duration::weeks")
144		.register_builtin_function_alias("duration::day", "duration::days")
145		.register_builtin_function_alias("duration::hour", "duration::hours")
146		.register_builtin_function_alias("duration::minute", "duration::minutes")
147		.register_builtin_function_alias("duration::second", "duration::seconds")
148		.register_builtin_function(Arc::new(text::ascii::TextAscii::new()))
149		.register_builtin_function(Arc::new(text::char::TextChar::new()))
150		.register_builtin_function(Arc::new(text::concat::TextConcat::new()))
151		.register_builtin_function(Arc::new(text::contains::TextContains::new()))
152		.register_builtin_function(Arc::new(text::count::TextCount::new()))
153		.register_builtin_function(Arc::new(text::ends_with::TextEndsWith::new()))
154		.register_builtin_function(Arc::new(text::index_of::TextIndexOf::new()))
155		.register_builtin_function(Arc::new(text::pad_left::TextPadLeft::new()))
156		.register_builtin_function(Arc::new(text::pad_right::TextPadRight::new()))
157		.register_builtin_function(Arc::new(text::repeat::TextRepeat::new()))
158		.register_builtin_function(Arc::new(text::replace::TextReplace::new()))
159		.register_builtin_function(Arc::new(text::reverse::TextReverse::new()))
160		.register_builtin_function(Arc::new(text::starts_with::TextStartsWith::new()))
161		.register_builtin_function(Arc::new(text::length::TextLength::new()))
162		.register_builtin_function(Arc::new(text::trim::TextTrim::new()))
163		.register_builtin_function(Arc::new(text::trim_end::TextTrimEnd::new()))
164		.register_builtin_function(Arc::new(text::trim_start::TextTrimStart::new()))
165		.register_builtin_function(Arc::new(text::upper::TextUpper::new()))
166		.register_builtin_function(Arc::new(text::lower::TextLower::new()))
167		.register_builtin_function(Arc::new(text::substring::TextSubstring::new()))
168		.register_builtin_function(Arc::new(text::format_bytes::FormatBytes::new()))
169		.register_builtin_function(Arc::new(text::format_bytes_si::FormatBytesSi::new()))
170		.register_builtin_function(Arc::new(meta::r#type::Type::new()))
171		.register_builtin_function(Arc::new(identity::id::Id::new()))
172		.register_builtin_function(Arc::new(is::some::IsSome::new()))
173		.register_builtin_function(Arc::new(is::none::IsNone::new()))
174		.register_builtin_function(Arc::new(is::r#type::IsType::new()))
175		.register_builtin_function(Arc::new(is::root::IsRoot::new()))
176		.register_builtin_function(Arc::new(is::anonymous::IsAnonymous::new()))
177		.register_builtin_function(Arc::new(json::object::JsonObject::new()))
178		.register_builtin_function(Arc::new(json::array::JsonArray::new()))
179		.register_builtin_function(Arc::new(json::pretty::JsonPretty::new()))
180		.register_builtin_function(Arc::new(json::serialize::JsonSerialize::new()))
181		.register_builtin_function(Arc::new(UuidV4::new()))
182		.register_builtin_function(Arc::new(UuidV7::new()))
183		.register_builtin_function(Arc::new(series::Series::new()))
184		.register_builtin_function(Arc::new(series::GenerateSeries::new()))
185		.register_builtin_function(Arc::new(rql::fingerprint::RqlFingerprint::new()))
186}