pub struct FunctionDefinition {
pub name: String,
pub trigger: String,
pub runtime: RuntimeType,
pub timeout_ms: Option<u64>,
pub run_as: Option<RunAs>,
pub when: Vec<TriggerPredicate>,
pub re_runnable: bool,
pub retry: Option<RetryConfig>,
}Expand description
Definition of a serverless function for deployment and execution.
Fields§
§name: StringUnique name for this function.
trigger: StringTrigger type and configuration (e.g., “after:mutation:createUser”, “cron:0 * * * *”, “http:GET:/users/:id”).
runtime: RuntimeTypeWhich runtime executes this function.
timeout_ms: Option<u64>Optional timeout in milliseconds (overrides defaults).
- For
before:mutationtriggers: defaults to 500ms - For other triggers: defaults to 5s
run_as: Option<RunAs>The authority ceiling this function’s fraiseql_query bridge writes run
under (#594). Absent ⇒ fail-closed: the bridge runs under an anonymous
identity and RLS/field-authz deny writes. See RunAs and
identity() (feature host-live).
when: Vec<TriggerPredicate>Declarative when predicates (#597) — a conjunction the dispatcher evaluates
on the row images before firing an after:mutation/after:capture function.
Empty ⇒ always fire (back-compat). See
TriggerPredicate.
re_runnable: boolFire-and-forget opt-out for durable dispatch.
After-mutation function dispatch is durable by default: a transient
failure is retried with backoff and, once retries are exhausted, the
invocation is dead-lettered so money- and send-path work is never
silently lost. Set re_runnable = true for work that is safe to simply
re-run later (e.g. LLM scoring) — such dispatch stays fire-and-forget with
no retry or dead-letter overhead. See ADR 0015 for the rationale.
retry: Option<RetryConfig>Per-function retry policy for durable dispatch.
None uses the server default (overridable via FRAISEQL_FUNCTIONS_RETRY_*
environment variables). Ignored when re_runnable is
true. Reuses the observer subsystem’s RetryConfig so retry semantics
are identical across both subsystems.
Implementations§
Source§impl FunctionDefinition
impl FunctionDefinition
Sourcepub fn new(name: &str, trigger: &str, runtime: RuntimeType) -> Self
pub fn new(name: &str, trigger: &str, runtime: RuntimeType) -> Self
Create a new function definition.
Sourcepub fn with_run_as(self, run_as: RunAs) -> Self
pub fn with_run_as(self, run_as: RunAs) -> Self
Set the run_as authority ceiling (#594).
Sourcepub fn identity(&self, request_id: impl Into<String>) -> SecurityContext
pub fn identity(&self, request_id: impl Into<String>) -> SecurityContext
The background SecurityContext this function’s fraiseql_query bridge
writes run under (#594).
Built from run_as via SecurityContext::system_job, so a
function write is audited as system_job:<function-name> under
ActorType::SystemJob — the same envelope a source write carries. Absent
run_as yields a fail-closed identity (no roles, no scopes, no tenant →
every authz/RLS decision denies). request_id correlates one dispatch
(typically its per-dispatch idempotency token).
Sourcepub const fn re_runnable(self) -> Self
pub const fn re_runnable(self) -> Self
Mark this function as re-runnable (fire-and-forget) dispatch.
See re_runnable and ADR 0015.
Sourcepub const fn with_timeout(self, timeout_ms: u64) -> Self
pub const fn with_timeout(self, timeout_ms: u64) -> Self
Set a custom timeout for this function.
Sourcepub fn effective_timeout(&self) -> Duration
pub fn effective_timeout(&self) -> Duration
Get the effective timeout for this function.
Sourcepub fn resolve_module_path(&self, module_dir: &Path) -> Option<PathBuf>
pub fn resolve_module_path(&self, module_dir: &Path) -> Option<PathBuf>
The module file this definition resolves to under module_dir, if one is
there — RuntimeType::resolve_module_path for the declared runtime and name,
the one rule for where code lives (#1325, #1399).
Returns None when no module is present, which the caller reports in its own
terms: a compile error, a boot failure, or a harness error.
Sourcepub fn module_path_pattern(&self, module_dir: &Path) -> String
pub fn module_path_pattern(&self, module_dir: &Path) -> String
The module-file candidates this definition names, rendered for a diagnostic:
<module_dir>/<name>.{ext,ext}.
Sourcepub fn is_before_mutation(&self) -> bool
pub fn is_before_mutation(&self) -> bool
Check if this function is a before:mutation trigger.
Sourcepub fn is_after_mutation(&self) -> bool
pub fn is_after_mutation(&self) -> bool
Check if this function is an after:mutation trigger.
Sourcepub fn is_after_storage(&self) -> bool
pub fn is_after_storage(&self) -> bool
Check if this function is an after:storage trigger.
Sourcepub fn is_after_ingest(&self) -> bool
pub fn is_after_ingest(&self) -> bool
Check if this function is an after:ingest trigger.
Trait Implementations§
Source§impl Clone for FunctionDefinition
impl Clone for FunctionDefinition
Source§impl Debug for FunctionDefinition
impl Debug for FunctionDefinition
Source§impl<'de> Deserialize<'de> for FunctionDefinition
impl<'de> Deserialize<'de> for FunctionDefinition
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for FunctionDefinition
Source§impl PartialEq for FunctionDefinition
impl PartialEq for FunctionDefinition
Source§impl Serialize for FunctionDefinition
impl Serialize for FunctionDefinition
impl StructuralPartialEq for FunctionDefinition
Auto Trait Implementations§
impl Freeze for FunctionDefinition
impl RefUnwindSafe for FunctionDefinition
impl Send for FunctionDefinition
impl Sync for FunctionDefinition
impl Unpin for FunctionDefinition
impl UnsafeUnpin for FunctionDefinition
impl UnwindSafe for FunctionDefinition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Send for Twhere
T: ?Sized,
impl<T> Sync for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.