@@ -5,9 +5,10 @@ use crate::{
5
5
Address , BigNum , ChainOf , ValidatorId ,
6
6
} ;
7
7
use once_cell:: sync:: Lazy ;
8
- use serde:: { Deserialize , Deserializer , Serialize } ;
8
+ use serde:: { Deserialize , Serialize } ;
9
9
use std:: { collections:: HashMap , num:: NonZeroU8 , time:: Duration } ;
10
10
use thiserror:: Error ;
11
+ use duration:: { milliseconds_to_std_duration, std_duration_to_milliseconds} ;
11
12
12
13
pub use toml:: de:: Error as TomlError ;
13
14
@@ -77,7 +78,7 @@ pub struct Config {
77
78
/// finish before running a new tick in the Validator Worker.
78
79
///
79
80
/// In milliseconds
80
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
81
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
81
82
pub wait_time : Duration ,
82
83
/// The maximum allowed limit of [`ValidatorMessage`](crate::sentry::ValidatorMessage)s per page
83
84
/// returned by Sentry's GET `/v5/channel/0xXXX.../validator-messages` route.
@@ -108,12 +109,12 @@ pub struct Config {
108
109
/// - GET `/v5/analytics/for-admin`
109
110
///
110
111
/// In milliseconds
111
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
112
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
112
113
pub analytics_maxtime : Duration ,
113
114
/// The amount of time that should have passed before sending a new heartbeat.
114
115
///
115
116
/// In milliseconds
116
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
117
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
117
118
pub heartbeat_time : Duration ,
118
119
/// The pro miles below which the [`ApproveState`](crate::validator::ApproveState)
119
120
/// becomes **unhealthy** in the [`Channel`](crate::Channel)'s Follower.
@@ -132,7 +133,7 @@ pub struct Config {
132
133
/// to a validator.
133
134
///
134
135
/// In milliseconds
135
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
136
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
136
137
pub propagation_timeout : Duration ,
137
138
/// The Client timeout for `SentryApi`.
138
139
///
@@ -142,20 +143,20 @@ pub struct Config {
142
143
/// [`Config.propagation_timeout`](Config::propagation_timeout).
143
144
///
144
145
/// In milliseconds
145
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
146
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
146
147
pub fetch_timeout : Duration ,
147
148
/// The Client timeout for `SentryApi` when collecting all channels
148
149
/// and Validators using the `/campaign/list` route.
149
150
///
150
151
/// In milliseconds
151
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
152
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
152
153
pub all_campaigns_timeout : Duration ,
153
154
/// The timeout for a single tick of a [`Channel`](crate::Channel) in
154
155
/// the Validator Worker.
155
156
/// This timeout is applied to both the leader and follower ticks.
156
157
///
157
158
/// In milliseconds
158
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
159
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
159
160
pub channel_tick_timeout : Duration ,
160
161
/// The default IP rate limit that will be imposed if
161
162
/// [`Campaign.event_submission`](crate::Campaign::event_submission) is [`None`].
@@ -214,7 +215,7 @@ impl Config {
214
215
#[ derive( Serialize , Deserialize , Debug , Clone ) ]
215
216
pub struct PlatformConfig {
216
217
pub url : ApiUrl ,
217
- #[ serde( deserialize_with = "milliseconds_to_std_duration" ) ]
218
+ #[ serde( deserialize_with = "milliseconds_to_std_duration" , serialize_with = "std_duration_to_milliseconds" ) ]
218
219
pub keep_alive_interval : Duration ,
219
220
}
220
221
@@ -252,21 +253,34 @@ pub struct Limits {
252
253
pub units_for_slot : limits:: UnitsForSlot ,
253
254
}
254
255
255
- fn milliseconds_to_std_duration < ' de , D > ( deserializer : D ) -> Result < Duration , D :: Error >
256
- where
257
- D : Deserializer < ' de > ,
258
- {
259
- use serde:: de:: Error ;
260
- use toml:: Value ;
261
256
262
- let toml_value: Value = Value :: deserialize ( deserializer) ?;
257
+ pub mod duration {
258
+ use std:: time:: Duration ;
259
+ use serde:: { Serializer , Deserializer , Deserialize } ;
263
260
264
- let milliseconds = match toml_value {
265
- Value :: Integer ( mills) => u64:: try_from ( mills) . map_err ( Error :: custom) ,
266
- _ => Err ( Error :: custom ( "Only integers allowed for this value" ) ) ,
267
- } ?;
261
+ pub fn milliseconds_to_std_duration < ' de , D > ( deserializer : D ) -> Result < Duration , D :: Error >
262
+ where
263
+ D : Deserializer < ' de > ,
264
+ {
265
+ use serde:: de:: Error ;
266
+ use toml:: Value ;
268
267
269
- Ok ( Duration :: from_millis ( milliseconds) )
268
+ let toml_value: Value = Value :: deserialize ( deserializer) ?;
269
+
270
+ let milliseconds = match toml_value {
271
+ Value :: Integer ( mills) => u64:: try_from ( mills) . map_err ( Error :: custom) ,
272
+ _ => Err ( Error :: custom ( "Only integers allowed for this value" ) ) ,
273
+ } ?;
274
+
275
+ Ok ( Duration :: from_millis ( milliseconds) )
276
+ }
277
+
278
+ pub fn std_duration_to_milliseconds < S > ( duration : & Duration , serializer : S ) -> Result < S :: Ok , S :: Error >
279
+ where
280
+ S : Serializer ,
281
+ {
282
+ serializer. serialize_str ( & duration. as_millis ( ) . to_string ( ) )
283
+ }
270
284
}
271
285
272
286
pub mod limits {
0 commit comments