computation_types/
function.rs

1use crate::{ComputationFn, NamedArgs};
2
3#[derive(Clone, Copy, Debug)]
4pub struct Function<ArgNames, Body> {
5    pub name: Option<&'static str>,
6    pub arg_names: ArgNames,
7    pub body: Body,
8}
9
10impl<ArgNames, Body> Function<ArgNames, Body> {
11    pub fn anonymous(arg_names: ArgNames, body: Body) -> Self {
12        Self {
13            name: None,
14            arg_names,
15            body,
16        }
17    }
18
19    pub fn named(name: &'static str, arg_names: ArgNames, body: Body) -> Self {
20        Self {
21            name: Some(name),
22            arg_names,
23            body,
24        }
25    }
26
27    pub fn fill<Args>(self, args: Args) -> Body::Filled
28    where
29        (ArgNames, Args): Into<NamedArgs>,
30        Body: ComputationFn,
31    {
32        self.body.fill((self.arg_names, args).into())
33    }
34}