radix_engine/system/
system_callback_api.rs

1use crate::errors::RuntimeError;
2use crate::internal_prelude::*;
3use crate::kernel::kernel_api::{KernelNodeApi, KernelSubstateApi};
4use crate::system::system_callback::*;
5use radix_engine_interface::api::SystemApi;
6use radix_engine_interface::blueprints::package::PackageExport;
7
8/// Callback object invoked by the system layer
9pub trait SystemCallbackObject: Sized {
10    /// Initialization Object
11    type Init: InitializationParameters<For = Self>;
12
13    /// Initialize and create the callback object above the system
14    fn init(init_input: Self::Init) -> Result<Self, BootloadingError>;
15
16    /// Invoke a function
17    fn invoke<
18        Y: SystemApi<RuntimeError>
19            + SystemBasedKernelInternalApi<SystemCallback = Self>
20            + KernelNodeApi
21            + KernelSubstateApi<SystemLockData>,
22    >(
23        package_address: &PackageAddress,
24        package_export: PackageExport,
25        input: &IndexedScryptoValue,
26        api: &mut Y,
27    ) -> Result<IndexedScryptoValue, RuntimeError>;
28}