//! Single macro-facing path for the `#[primop]` support surface: the traits //! generated code type-checks through (defined in `fix_runtime`, where the //! impl sets are coherent) and the stub trio that keeps un-expanded primop //! sources resolving in tooling. use std::future::Future; pub use fix_runtime::{CalleeReady, ForceTarget, UnwrapSlot}; use fix_runtime::{Slot, Value}; macro_rules! type_hint { () => { if false { return async { unreachable!(); }; } }; } #[expect(clippy::panic, reason = "deliberately panic when the stub is called")] pub fn force(_: Slot>) -> impl Future> { type_hint!(); panic!("stub `force` called at runtime") } #[expect(clippy::panic, reason = "deliberately panic when the stub is called")] pub fn call(_: &T, _: A) -> impl Future { type_hint!(); panic!("stub `call` called at runtime") } #[expect(clippy::panic, reason = "deliberately panic when the stub is called")] pub fn spill(_: T) -> Slot { panic!("stub `spill` called at runtime") }