@@ -8,15 +8,15 @@ use crate::{
88 } ,
99} ;
1010
11- pub fn iter ( b : & mut Builder , recvctx : & RecvCtx , event : & Event ) {
11+ pub fn iter ( b : & mut Builder , recvctx : & RecvCtx , path : & str , event : & Event ) {
1212 match event. data . len ( ) {
13- 0 => self :: iter_0data ( b, recvctx, event) ,
14- 1 => self :: iter_1data ( b, recvctx, event) ,
15- _ => self :: iter_ndata ( b, recvctx, event) ,
13+ 0 => self :: iter_0data ( b, recvctx, path , event) ,
14+ 1 => self :: iter_1data ( b, recvctx, path , event) ,
15+ _ => self :: iter_ndata ( b, recvctx, path , event) ,
1616 }
1717}
1818
19- fn iter_0data ( b : & mut Builder , recvctx : & RecvCtx , event : & Event ) {
19+ fn iter_0data ( b : & mut Builder , recvctx : & RecvCtx , path : & str , event : & Event ) {
2020 let counter = b. init ( 0 ) ;
2121
2222 let listener = b. function ( |b, [ ] | {
@@ -41,7 +41,7 @@ fn iter_0data(b: &mut Builder, recvctx: &RecvCtx, event: &Event) {
4141 b. ret ( vec ! [ next. expr( ) , captured. expr( ) , 0 . into( ) ] ) ;
4242 } ) ;
4343
44- b. export ( & event . path , event. opts . casing . fmt ( "iter" ) , & iter)
44+ b. export ( path, event. opts . casing . fmt ( "iter" ) , & iter)
4545}
4646
4747fn queue ( b : & mut Builder , recvctx : & RecvCtx , event : & Event ) -> TVar {
@@ -72,7 +72,7 @@ fn queue(b: &mut Builder, recvctx: &RecvCtx, event: &Event) -> TVar {
7272 queue
7373}
7474
75- fn iter_1data ( b : & mut Builder , recvctx : & RecvCtx , event : & Event ) {
75+ fn iter_1data ( b : & mut Builder , recvctx : & RecvCtx , path : & str , event : & Event ) {
7676 let queue = self :: queue ( b, recvctx, event) ;
7777
7878 let iter = b. function ( |b, [ ] | {
@@ -81,10 +81,10 @@ fn iter_1data(b: &mut Builder, recvctx: &RecvCtx, event: &Event) {
8181 b. ret ( vec ! [ captured. expr( ) ] ) ;
8282 } ) ;
8383
84- b. export ( & event . path , event. opts . casing . fmt ( "iter" ) , & iter)
84+ b. export ( path, event. opts . casing . fmt ( "iter" ) , & iter)
8585}
8686
87- fn iter_ndata ( b : & mut Builder , recvctx : & RecvCtx , event : & Event ) {
87+ fn iter_ndata ( b : & mut Builder , recvctx : & RecvCtx , path : & str , event : & Event ) {
8888 let queue = self :: queue ( b, recvctx, event) ;
8989
9090 let next = b. function ( |b, [ captured, i] | {
@@ -109,5 +109,27 @@ fn iter_ndata(b: &mut Builder, recvctx: &RecvCtx, event: &Event) {
109109 b. ret ( vec ! [ next. expr( ) , captured. expr( ) , 1 . into( ) ] ) ;
110110 } ) ;
111111
112- b. export ( & event. path , event. opts . casing . fmt ( "iter" ) , & iter)
112+ b. export ( path, event. opts . casing . fmt ( "iter" ) , & iter)
113+ }
114+
115+ pub fn interface ( s : & mut String , event : & Event ) -> std:: fmt:: Result {
116+ use std:: fmt:: Write ;
117+
118+ match event. data . len ( ) {
119+ 0 => write ! ( s, "{{ iter: () -> (number?) -> number? }}" ) ,
120+ 1 => write ! ( s, "{{ iter: () -> {{ {} }} }}" , event. data. first( ) . unwrap( ) ) ,
121+ _ => {
122+ let args = event
123+ . data
124+ . iter ( )
125+ . map ( |ty| ty. to_string ( ) )
126+ . collect :: < Vec < _ > > ( )
127+ . join ( ", " ) ;
128+
129+ write ! (
130+ s,
131+ "{{ iter: () -> ((, {{ any }} number?) -> (number?, {args}), {{ any }}) }}"
132+ )
133+ }
134+ }
113135}
0 commit comments