Skip to main content

runmat_runtime/builtin/
binding.rs

1use runmat_builtins::BuiltinBindingIdentity;
2use runmat_value::Value;
3use std::{future::Future, pin::Pin};
4
5use crate::RuntimeError;
6
7pub type RuntimeBuiltinFuture =
8    Pin<Box<dyn Future<Output = Result<Value, RuntimeError>> + 'static>>;
9pub type RuntimeBuiltinImplementation = fn(&[Value]) -> RuntimeBuiltinFuture;
10
11#[derive(Clone, Copy)]
12#[repr(C)]
13pub struct RuntimeBuiltinBinding {
14    pub identity: BuiltinBindingIdentity,
15    pub implementation: RuntimeBuiltinImplementation,
16}
17
18impl RuntimeBuiltinBinding {
19    pub const fn new(
20        identity: BuiltinBindingIdentity,
21        implementation: RuntimeBuiltinImplementation,
22    ) -> Self {
23        Self {
24            identity,
25            implementation,
26        }
27    }
28}
29
30impl std::fmt::Debug for RuntimeBuiltinBinding {
31    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32        formatter
33            .debug_struct("RuntimeBuiltinBinding")
34            .field("identity", &self.identity)
35            .finish_non_exhaustive()
36    }
37}