diff --git a/src/variant.rs b/src/variant.rs index f7a9e25..d8ca77f 100644 --- a/src/variant.rs +++ b/src/variant.rs @@ -26,6 +26,24 @@ use log::{debug, log_enabled, Level}; pub fn register_variant(lua: &Lua) -> mlua::Result<()> { lua.register_userdata_type::(|reg| { + reg.add_meta_function(MetaMethod::ToString, |_lua, this: AnyUserData| { + let v = &this.borrow::()?.0; + let mut kstr = rust_htslib::htslib::kstring_t { + l: 0, + m: 0, + s: std::ptr::null_mut(), + }; + let h = v.header(); + unsafe { rust_htslib::htslib::vcf_format(h.inner, v.inner(), &mut kstr) }; + let s = unsafe { + String::from_utf8_unchecked( + std::slice::from_raw_parts(kstr.s as *const u8, kstr.l as usize).to_vec(), + ) + }; + eprintln!("s: {}", s); + + Ok(s) + }); reg.add_meta_function( MetaMethod::Index, |_lua, (_, name): (AnyUserData, String)| { diff --git a/src/vcfexpr.rs b/src/vcfexpr.rs index 490d653..d8ddc16 100644 --- a/src/vcfexpr.rs +++ b/src/vcfexpr.rs @@ -170,8 +170,8 @@ impl<'lua> VCFExpr<'lua> { lua.scope(|scope| { globals.raw_set("header", scope.create_any_userdata_ref_mut(&mut hv)?)?; for path in lua_prelude { - let code = std::fs::read_to_string(path)?; - lua.load(&code).exec()?; + let code = std::fs::read_to_string(&path)?; + lua.load(&code).set_name(path).exec()?; } Ok(()) })?;