jlrs 0.23.0

jlrs provides bindings to the Julia C API that enable Julia code to be called from Rust and more.
Documentation
mod util;
#[cfg(feature = "local-rt")]
mod tests {
    use jlrs::{
        data::layout::tuple::{Tuple, Tuple0, Tuple1, Tuple2},
        prelude::*,
    };

    use super::util::JULIA;

    fn create_cast_tuple0() {
        JULIA.with(|handle| {
            handle.borrow_mut().with_stack(|mut stack| {
                stack.scope(|mut frame| {
                    let t0 = Tuple0();
                    let v = Value::new(&mut frame, t0);
                    assert!(v.is::<Tuple0>());
                    assert!(v.unbox::<Tuple0>().is_ok());
                })
            })
        })
    }

    fn create_cast_tuple1() {
        JULIA.with(|handle| {
            handle.borrow_mut().with_stack(|mut stack| {
                stack.scope(|mut frame| {
                    let t1 = Tuple1(1u64);
                    let v = Value::new(&mut frame, t1);
                    assert!(v.is::<Tuple1<u64>>());
                    assert!(v.unbox::<Tuple1<u64>>().is_ok());
                })
            })
        })
    }

    fn create_cast_tuple2() {
        JULIA.with(|handle| {
            handle.borrow_mut().with_stack(|mut stack| {
                stack.scope(|mut frame| {
                    let t2 = Tuple2(1u64, -3i32);
                    let v = Value::new(&mut frame, t2);
                    assert!(v.is::<Tuple2<u64, i32>>());
                    assert!(v.unbox::<Tuple2<u64, i32>>().is_ok());
                })
            })
        })
    }

    fn create_tuple_from_values() {
        JULIA.with(|handle| {
            handle.borrow_mut().with_stack(|mut stack| {
                stack.scope(|mut frame| {
                    let v1 = Value::new(&mut frame, 1u64);
                    let v2 = Value::new(&mut frame, -3i32);
                    let t = Tuple::new(&mut frame, [v1, v2]).unwrap();
                    assert!(t.is::<Tuple2<u64, i32>>());
                    assert!(t.unbox::<Tuple2<u64, i32>>().is_ok());
                })
            })
        })
    }

    #[test]
    fn tuple_tests() {
        create_cast_tuple0();
        create_cast_tuple1();
        create_cast_tuple2();
        create_tuple_from_values();
    }
}