@@ -5,23 +5,54 @@ pub struct LibAsErlang(pub NifLibrary);
55
66impl fmt:: Display for LibAsErlang {
77 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
8- write ! ( f, "-module({}).\n \n " , string_to_erlang_atom( & self . 0 . name) ) ?;
8+ let nif_lib = & self . 0 ;
9+
10+ let module_name = string_to_erlang_atom ( & nif_lib. name ) ;
11+
12+ let nifs: Vec < _ > = nif_lib
13+ . nifs
14+ . iter ( )
15+ . enumerate ( )
16+ . map ( |( n, nif) | ( n, string_to_erlang_atom ( & nif. name ) , nif. arity ) )
17+ . collect ( ) ;
18+
19+ let nif_name = nif_lib
20+ . path
21+ . with_extension ( "" )
22+ . file_name ( )
23+ . unwrap ( )
24+ . to_string_lossy ( )
25+ . to_string ( ) ;
26+
27+ writeln ! ( f, "-module({module_name}).\n " ) ?;
928 writeln ! ( f, "-export([" ) ?;
10- let count = self . 0 . nifs . len ( ) ;
11- for ( n, nif) in self . 0 . nifs . iter ( ) . enumerate ( ) {
12- write ! ( f, " {}/{}" , string_to_erlang_atom( & nif. name) , nif. arity) ?;
13- if n == count - 1 {
29+ let count = nifs. len ( ) ;
30+ for ( n, name, arity) in & nifs {
31+ write ! ( f, " {name}/{arity}" ) ?;
32+ if * n != count - 1 {
33+ write ! ( f, "," ) ?;
34+ }
35+ writeln ! ( f) ?;
36+ }
37+ write ! ( f, "]).\n \n " ) ?;
38+
39+ writeln ! ( f, "-nifs([" ) ?;
40+ for ( n, name, arity) in & nifs {
41+ write ! ( f, " {name}/{arity}" ) ?;
42+ if * n != count - 1 {
1443 write ! ( f, "," ) ?;
1544 }
1645 writeln ! ( f) ?;
1746 }
1847 write ! ( f, "]).\n \n " ) ?;
1948
20- // TODO: On Load function
49+ writeln ! ( f, "-define(NIF_LOAD_INFO, 0)." ) ?;
50+ writeln ! ( f, "-define(NIF_NAME, \" {}\" )." , & nif_name) ?;
51+ write ! ( f, "{}" , include_str!( "../snippets/on_load.erl" ) ) ?;
2152
22- for nif in & self . 0 . nifs {
23- write ! ( f, "{}(" , string_to_erlang_atom ( & nif . name ) ) ?;
24- for i in 0 ..nif . arity {
53+ for ( _ , name , arity ) in & nifs {
54+ write ! ( f, "{name }(" ) ?;
55+ for i in 0 ..* arity {
2556 if i > 0 {
2657 write ! ( f, ", " ) ?;
2758 }
0 commit comments