@@ -96,25 +96,25 @@ pub(crate) fn register_header(lua: &Lua) -> mlua::Result<()> {
96
96
} ,
97
97
) ;
98
98
reg. add_meta_function ( MetaMethod :: ToString , |_lua, this : AnyUserData | {
99
- let this = this. borrow :: < WrapHeaderView > ( ) ?;
100
-
101
- let mut kstr = rust_htslib:: htslib:: kstring_t {
102
- l : 0 ,
103
- m : 0 ,
104
- s : std:: ptr:: null_mut ( ) ,
105
- } ;
106
- if unsafe { rust_htslib:: htslib:: bcf_hdr_format ( this. 0 . inner , 0 , & mut kstr) } != 0 {
107
- return Err ( mlua:: Error :: ExternalError ( Arc :: new (
108
- std:: io:: Error :: last_os_error ( ) ,
109
- ) ) ) ;
110
- }
111
- let s = unsafe {
112
- String :: from_utf8_unchecked (
113
- std:: slice:: from_raw_parts ( kstr. s as * const u8 , kstr. l as usize ) . to_vec ( ) ,
114
- )
115
- } ;
99
+ this. borrow_scoped :: < WrapHeaderView , Result < String , mlua:: Error > > ( |this| {
100
+ let mut kstr = rust_htslib:: htslib:: kstring_t {
101
+ l : 0 ,
102
+ m : 0 ,
103
+ s : std:: ptr:: null_mut ( ) ,
104
+ } ;
105
+ if unsafe { rust_htslib:: htslib:: bcf_hdr_format ( this. 0 . inner , 0 , & mut kstr) } != 0 {
106
+ return Err ( mlua:: Error :: ExternalError ( Arc :: new (
107
+ std:: io:: Error :: last_os_error ( ) ,
108
+ ) ) ) ;
109
+ }
110
+ let s = unsafe {
111
+ String :: from_utf8_unchecked (
112
+ std:: slice:: from_raw_parts ( kstr. s as * const u8 , kstr. l as usize ) . to_vec ( ) ,
113
+ )
114
+ } ;
116
115
117
- Ok ( s)
116
+ Ok ( s)
117
+ } )
118
118
} ) ;
119
119
reg. add_field_method_get ( "samples" , |_lua, this : & WrapHeaderView | {
120
120
let samples = this
@@ -143,34 +143,34 @@ pub(crate) fn register_header(lua: &Lua) -> mlua::Result<()> {
143
143
reg. add_function_mut (
144
144
"add_info" ,
145
145
|_lua, ( ud, tbl) : ( AnyUserData , HashMap < String , String > ) | {
146
- eprintln ! ( "in add_info" ) ;
147
- let this = ud . borrow_mut :: < WrapHeaderView > ( ) ? ;
148
- eprintln ! ( "got this" ) ;
149
- let c_str = std :: ffi :: CString :: new ( format ! (
150
- r#"##INFO=<ID={}, Number={},Type={},Description={}>"# ,
151
- handle_hash_get( & tbl, "ID " , "info" ) ?,
152
- handle_hash_get( & tbl, "Number " , "info" ) ?,
153
- handle_hash_get ( & tbl , "Type" , "info" ) ? ,
154
- handle_hash_get ( & tbl , "Description" , "info" ) ? ,
155
- ) )
156
- . expect ( "CString::new failed" ) ;
157
- let ret =
158
- unsafe { rust_htslib :: htslib :: bcf_hdr_append ( this . 0 . inner , c_str . as_ptr ( ) ) } ;
159
- if ret != 0 {
160
- log :: error! ( "Error adding INFO field for {:?}: {}" , tbl , ret ) ;
161
- return Err ( mlua :: Error :: ExternalError ( Arc :: new (
162
- std :: io :: Error :: last_os_error ( ) ,
163
- ) ) ) ;
164
- }
165
- let ret = unsafe { rust_htslib :: htslib :: bcf_hdr_sync ( this . 0 . inner ) } ;
166
- if ret != 0 {
167
- log :: warn! (
168
- "Error syncing header after adding INFO field for {:?}: {}" ,
169
- tbl ,
170
- ret
171
- ) ;
172
- }
173
- Ok ( ( ) )
146
+ ud . borrow_mut_scoped :: < WrapHeaderView , Result < ( ) , mlua :: Error > > ( |this| {
147
+ let c_str = std :: ffi :: CString :: new ( format ! (
148
+ r#"##INFO=<ID={},Number={},Type={},Description={}>"# ,
149
+ handle_hash_get ( & tbl , "ID" , "info" ) ? ,
150
+ handle_hash_get ( & tbl , " Number" , "info" ) ? ,
151
+ handle_hash_get( & tbl, "Type " , "info" ) ?,
152
+ handle_hash_get( & tbl, "Description " , "info" ) ?,
153
+ ) )
154
+ . expect ( "CString::new failed" ) ;
155
+ let ret = unsafe {
156
+ rust_htslib :: htslib :: bcf_hdr_append ( this . 0 . inner , c_str . as_ptr ( ) )
157
+ } ;
158
+ if ret != 0 {
159
+ log :: error! ( "Error adding INFO field for {:?}: {}" , tbl , ret ) ;
160
+ return Err ( mlua :: Error :: ExternalError ( Arc :: new (
161
+ std :: io :: Error :: last_os_error ( ) ,
162
+ ) ) ) ;
163
+ }
164
+ let ret = unsafe { rust_htslib :: htslib :: bcf_hdr_sync ( this . 0 . inner ) } ;
165
+ if ret != 0 {
166
+ log :: warn! (
167
+ "Error syncing header after adding INFO field for {:?}: {}" ,
168
+ tbl ,
169
+ ret
170
+ ) ;
171
+ }
172
+ Ok ( ( ) )
173
+ } )
174
174
} ,
175
175
) ;
176
176
reg. add_function_mut (
@@ -295,7 +295,6 @@ mod tests {
295
295
. set_name ( "test_add_info" )
296
296
. into_function ( )
297
297
. expect ( "error in test_add_info" ) ;
298
-
299
298
lua. scope ( |scope| {
300
299
globals. set (
301
300
"header" ,
0 commit comments