1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use crate::codegen_runtime::{NifReturnable, NifReturned};
use crate::error::Error;
use crate::{Env, Term};

pub enum Return<'a> {
    Term(Term<'a>),
    Error(Error),
}

unsafe impl<'b> NifReturnable for Return<'b> {
    unsafe fn as_returned(self, env: Env) -> NifReturned {
        match self {
            Return::Term(inner) => NifReturned::Term(inner.as_c_arg()),
            Return::Error(inner) => inner.as_returned(env),
        }
    }
}