metacall 0.5.1

Call NodeJS, TypeScript, Python, C#, Ruby... functions from Rust (a Rust Port for MetaCall).
Documentation

Abstract

METACALL is a library that allows calling functions, methods or procedures between programming languages. With METACALL you can transparently execute code from / to any programming language, for example, call TypeScript code from Rust.

Install

MetaCall is a C plugin based library. This crate wraps the C library into Rust, so in order to make it work, you should install MetaCall binaries first (click here for installing it on other platforms):

curl -sL https://raw.githubusercontent.com/metacall/install/master/install.sh | sh

Linking

If your project uses MetaCall in a folder that is not in the system path, we encourage to use metacall-sys crate as a build-dependecy. By this way you will be able to locate and link MetaCall directly in your build system. For example:

Cargo.toml:

[build-dependencies]
metacall-sys = { path = "./sys", version = "0.1.0" }

build.rs:

fn main() {
    // Find MetaCall library
    metacall_sys::build();
}

Example

sum.ts

export function sum(a: number, b: number): number {
	return a + b;
}

main.rs

use metacall::{initialize, metacall, load};

fn main() {
    // Initialize MetaCall at the top
    let _metacall = initialize().unwrap();
     
    // Load the file
    load::from_single_file("ts", "sum.ts").unwrap();

    // Call the sum function
    let sum = metacall::<f64>("sum", [1.0, 2.0]).unwrap();

    assert_eq!(sum, 3.0);
}