@@ -130,6 +130,7 @@ pub enum Resource {
130130 port : u16 ,
131131 tcp : bool ,
132132 udp : bool ,
133+ timeout : Option < Duration > ,
133134 users : Vec < UserId > ,
134135 } ,
135136}
@@ -339,6 +340,7 @@ fn extract_resource_port(
339340 map : & Map ,
340341) -> ah:: Result < ( ) > {
341342 let mut port: Option < u16 > = None ;
343+ let mut timeout: Option < Duration > = None ;
342344 let mut users: Vec < String > = vec ! [ ] ;
343345 let mut tcp = false ;
344346 let mut udp = false ;
@@ -355,6 +357,15 @@ fn extract_resource_port(
355357 } else {
356358 return Err ( err ! ( "[RESOURCE] invalid 'port' option" ) ) ;
357359 }
360+ } else if k == "timeout" {
361+ if vs. len ( ) == 1 {
362+ if timeout. is_some ( ) {
363+ return Err ( err ! ( "[RESOURCE] multiple 'timeout' values" ) ) ;
364+ }
365+ timeout = Some ( parse_duration ( & vs[ 0 ] ) . context ( "[RESOURCES] timeout" ) ?) ;
366+ } else {
367+ return Err ( err ! ( "[RESOURCE] invalid 'timeout' option" ) ) ;
368+ }
358369 } else if k == "users" {
359370 if !users. is_empty ( ) {
360371 return Err ( err ! ( "[RESOURCE] multiple 'users' values" ) ) ;
@@ -409,6 +420,7 @@ fn extract_resource_port(
409420 port,
410421 tcp,
411422 udp,
423+ timeout,
412424 users,
413425 } ,
414426 ) ;
@@ -847,6 +859,7 @@ mod tests {
847859 port: 4096 ,
848860 tcp: true ,
849861 udp: false ,
862+ timeout: None ,
850863 users: vec![ ]
851864 }
852865 ) ;
@@ -861,6 +874,7 @@ mod tests {
861874 port: 4096 ,
862875 tcp: true ,
863876 udp: false ,
877+ timeout: None ,
864878 users: vec![ ]
865879 }
866880 ) ;
@@ -875,12 +889,13 @@ mod tests {
875889 port: 4096 ,
876890 tcp: false ,
877891 udp: true ,
892+ timeout: None ,
878893 users: vec![ 1 . into( ) , 2 . into( ) , 3 . into( ) ]
879894 }
880895 ) ;
881896
882897 let mut ini = Ini :: new ( ) ;
883- ini. parse_str ( "[RESOURCES]\n 9876ABCD = port : 4096 / udp, tcp / users: 4\n " )
898+ ini. parse_str ( "[RESOURCES]\n 9876ABCD = port : 4096 / udp, tcp / users: 4 / timeout:42 \n " )
884899 . unwrap ( ) ;
885900 let resources = get_resources ( & ini) . unwrap ( ) ;
886901 assert_eq ! (
@@ -889,6 +904,7 @@ mod tests {
889904 port: 4096 ,
890905 tcp: true ,
891906 udp: true ,
907+ timeout: Some ( Duration :: from_secs( 42 ) ) ,
892908 users: vec![ 4 . into( ) ]
893909 }
894910 ) ;
0 commit comments