use std::fmt;
use crate::atom::Atom;
use crate::term::Term;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum SpawnError {
UnresolvedMfa,
}
impl fmt::Display for SpawnError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UnresolvedMfa => f.write_str("unresolved module/function/arity for spawn"),
}
}
}
impl std::error::Error for SpawnError {}
pub trait SpawnFacility: Send + Sync {
fn spawn(
&self,
module: Atom,
function: Atom,
args: Vec<Term>,
link_to: Option<u64>,
) -> Result<u64, SpawnError>;
fn spawn_lambda(
&self,
module: Atom,
lambda_index: u32,
link_to: Option<u64>,
) -> Result<u64, SpawnError>;
}
#[derive(Clone, Debug)]
pub struct SpawnRecord {
pub module: Atom,
pub function: Atom,
pub args: Vec<Term>,
pub link_to: Option<u64>,
}