@@ -12,6 +12,7 @@ use libsignal_bridge::ffi::{
1212use libsignal_bridge:: { IllegalArgumentError , ffi_arg_type, ffi_result_type} ;
1313use libsignal_bridge_macros:: bridge_fn;
1414use libsignal_core:: ProtocolAddress ;
15+ use libsignal_net:: infra:: errors:: RetryLater ;
1516use libsignal_net_chat:: api:: ChallengeOption ;
1617use libsignal_net_chat:: api:: messages:: MismatchedDeviceError ;
1718use uuid:: Uuid ;
@@ -146,17 +147,28 @@ fn Error_GetTriesRemaining(err: &SignalFfiError) -> Result<u32, IllegalArgumentE
146147 } )
147148}
148149
150+ #[ allow( clippy:: type_complexity) ]
149151#[ bridge_fn( jni = false , node = false ) ]
150152fn Error_GetRateLimitChallenge (
151153 err : & SignalFfiError ,
152- ) -> Result < ( String , Box < [ ChallengeOption ] > ) , IllegalArgumentError > {
153- let libsignal_net_chat:: api:: RateLimitChallenge { token, options } =
154- err. provide_rate_limit_challenge ( ) . map_err ( |_| {
155- IllegalArgumentError :: new ( format ! (
156- "cannot get rate limit challenge error from error ({err})"
157- ) )
158- } ) ?;
159- Ok ( ( token. clone ( ) , options[ ..] . into ( ) ) )
154+ ) -> Result < ( ( String , Box < [ ChallengeOption ] > ) , i64 ) , IllegalArgumentError > {
155+ let libsignal_net_chat:: api:: RateLimitChallenge {
156+ token,
157+ options,
158+ retry_later,
159+ } = err. provide_rate_limit_challenge ( ) . map_err ( |_| {
160+ IllegalArgumentError :: new ( format ! (
161+ "cannot get rate limit challenge error from error ({err})"
162+ ) )
163+ } ) ?;
164+ let retry_later = retry_later
165+ . map (
166+ |RetryLater {
167+ retry_after_seconds,
168+ } | i64:: from ( retry_after_seconds) ,
169+ )
170+ . unwrap_or ( -1 ) ;
171+ Ok ( ( ( token. clone ( ) , options[ ..] . into ( ) ) , retry_later) )
160172}
161173
162174#[ bridge_fn( jni = false , node = false ) ]
0 commit comments