libnode_rs 0.0.2

Library embedding Nodejs (libnode) within Rust
Documentation
use std::ffi::c_char;
use std::ffi::c_int;
use std::ffi::CString;

use crate::libnode::mark_running;
use crate::libnode::mark_stopped;
use crate::sys;

pub fn start_blocking<Args: AsRef<str>>(argv: &[Args]) -> crate::Result<()> {
  mark_running()?;
  let current_exe = CString::new(std::env::current_exe().unwrap().to_str().unwrap()).unwrap();

  let args = argv
    .iter()
    .map(|arg| CString::new(arg.as_ref()).unwrap())
    .collect::<Vec<CString>>();

  let mut final_args = vec![current_exe];
  final_args.extend(args);

  let c_args = final_args
    .iter()
    .map(|arg| arg.as_ptr())
    .collect::<Vec<*const c_char>>();

  unsafe { sys::node_start(c_args.len() as c_int, c_args.as_ptr()) };

  mark_stopped()?;
  Ok(())
}