pub unsafe trait ToOCaml<T> {
    // Required method
    fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, T>;

    // Provided method
    fn to_boxroot(&self, cr: &mut OCamlRuntime) -> BoxRoot<T> { ... }
}
Expand description

Implements conversion from Rust values into OCaml values.

§Safety

Implementing this trait involves unsafe code that interacts with the OCaml runtime. Implementors must ensure the following to uphold Rust’s safety guarantees:

  • Memory Safety: Returned OCaml values must be valid and correctly represent the memory layout expected by the OCaml runtime. Any misrepresentation can lead to undefined behavior, potentially causing segmentation faults or data corruption.

  • Handling of OCaml Exceptions: If the OCaml code can raise exceptions, the implementor must ensure these are appropriately handled. Uncaught OCaml exceptions should not be allowed to propagate into the Rust code, as they are not compatible with Rust’s error handling mechanisms.

Implementors of this trait must have a deep understanding of both Rust’s and OCaml’s memory models, garbage collection, and runtime behaviors to ensure safe interoperability.

Required Methods§

source

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, T>

Convert to OCaml value.

Provided Methods§

source

fn to_boxroot(&self, cr: &mut OCamlRuntime) -> BoxRoot<T>

Convert to OCaml value. Return an already rooted value as BoxRoot<T>.

Implementations on Foreign Types§

source§

impl ToOCaml<bool> for bool

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, bool>

source§

impl ToOCaml<isize> for i32

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlInt>

source§

impl ToOCaml<isize> for i64

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlInt>

source§

impl ToOCaml<()> for ()

source§

fn to_ocaml(&self, _cr: &mut OCamlRuntime) -> OCaml<'static, ()>

source§

impl ToOCaml<Array1<u8>> for Box<[u8]>

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, Array1<u8>>

source§

impl ToOCaml<String> for &str

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, String>

source§

impl ToOCaml<String> for &[u8]

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, String>

source§

impl ToOCaml<String> for String

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, String>

source§

impl ToOCaml<String> for Vec<u8>

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, String>

source§

impl ToOCaml<OCamlBytes> for &str

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlBytes>

source§

impl ToOCaml<OCamlBytes> for &[u8]

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlBytes>

source§

impl ToOCaml<OCamlBytes> for Box<[u8]>

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlBytes>

source§

impl ToOCaml<OCamlBytes> for String

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlBytes>

source§

impl ToOCaml<OCamlBytes> for Vec<u8>

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlBytes>

source§

impl ToOCaml<OCamlFloat> for f64

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlFloat>

source§

impl ToOCaml<OCamlFloatArray> for Vec<f64>

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlFloatArray>

source§

impl ToOCaml<OCamlInt32> for i32

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlInt32>

source§

impl ToOCaml<OCamlInt64> for i64

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlInt64>

source§

impl<A, B, C, D, E, F, G, H, I, J, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static, OCamlF: 'static, OCamlG: 'static, OCamlH: 'static, OCamlI: 'static, OCamlJ: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE, OCamlF, OCamlG, OCamlH, OCamlI, OCamlJ)> for (A, B, C, D, E, F, G, H, I, J)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>, F: ToOCaml<OCamlF>, G: ToOCaml<OCamlG>, H: ToOCaml<OCamlH>, I: ToOCaml<OCamlI>, J: ToOCaml<OCamlJ>,

source§

impl<A, B, C, D, E, F, G, H, I, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static, OCamlF: 'static, OCamlG: 'static, OCamlH: 'static, OCamlI: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE, OCamlF, OCamlG, OCamlH, OCamlI)> for (A, B, C, D, E, F, G, H, I)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>, F: ToOCaml<OCamlF>, G: ToOCaml<OCamlG>, H: ToOCaml<OCamlH>, I: ToOCaml<OCamlI>,

source§

impl<A, B, C, D, E, F, G, H, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static, OCamlF: 'static, OCamlG: 'static, OCamlH: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE, OCamlF, OCamlG, OCamlH)> for (A, B, C, D, E, F, G, H)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>, F: ToOCaml<OCamlF>, G: ToOCaml<OCamlG>, H: ToOCaml<OCamlH>,

source§

impl<A, B, C, D, E, F, G, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static, OCamlF: 'static, OCamlG: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE, OCamlF, OCamlG)> for (A, B, C, D, E, F, G)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>, F: ToOCaml<OCamlF>, G: ToOCaml<OCamlG>,

source§

impl<A, B, C, D, E, F, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static, OCamlF: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE, OCamlF)> for (A, B, C, D, E, F)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>, F: ToOCaml<OCamlF>,

source§

impl<A, B, C, D, E, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static, OCamlE: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD, OCamlE)> for (A, B, C, D, E)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>, E: ToOCaml<OCamlE>,

source§

impl<A, B, C, D, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static, OCamlD: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC, OCamlD)> for (A, B, C, D)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>, D: ToOCaml<OCamlD>,

source§

impl<A, B, C, OCamlA: 'static, OCamlB: 'static, OCamlC: 'static> ToOCaml<(OCamlA, OCamlB, OCamlC)> for (A, B, C)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>, C: ToOCaml<OCamlC>,

source§

fn to_ocaml<'a>( &self, cr: &'a mut OCamlRuntime ) -> OCaml<'a, (OCamlA, OCamlB, OCamlC)>

source§

impl<A, B, OCamlA: 'static, OCamlB: 'static> ToOCaml<(OCamlA, OCamlB)> for (A, B)
where A: ToOCaml<OCamlA>, B: ToOCaml<OCamlB>,

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, (OCamlA, OCamlB)>

source§

impl<A, OCamlA> ToOCaml<OCamlA> for Box<A>
where A: ToOCaml<OCamlA>,

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlA>

source§

impl<A, OCamlA: 'static> ToOCaml<Option<OCamlA>> for Option<A>
where A: ToOCaml<OCamlA>,

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, Option<OCamlA>>

source§

impl<A, OCamlA: 'static> ToOCaml<OCamlList<OCamlA>> for Vec<A>
where A: ToOCaml<OCamlA>,

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, OCamlList<OCamlA>>

source§

impl<A, OCamlA: 'static> ToOCaml<OCamlUniformArray<OCamlA>> for Vec<A>
where A: ToOCaml<OCamlA>,

source§

fn to_ocaml<'a>( &self, cr: &'a mut OCamlRuntime ) -> OCaml<'a, OCamlUniformArray<OCamlA>>

source§

impl<A, OCamlA: 'static, Err, OCamlErr: 'static> ToOCaml<Result<OCamlA, OCamlErr>> for Result<A, Err>
where A: ToOCaml<OCamlA>, Err: ToOCaml<OCamlErr>,

source§

fn to_ocaml<'a>( &self, cr: &'a mut OCamlRuntime ) -> OCaml<'a, Result<OCamlA, OCamlErr>>

source§

impl<A: BigarrayElt> ToOCaml<Array1<A>> for &[A]

source§

fn to_ocaml<'a>(&self, cr: &'a mut OCamlRuntime) -> OCaml<'a, Array1<A>>

Implementors§

source§

impl<'root, T> ToOCaml<T> for OCamlRef<'root, T>

source§

impl<T> ToOCaml<T> for BoxRoot<T>