1
- use crate :: {
2
- analytics:: { OperatingSystem , Timeframe } ,
3
- balances:: BalancesState ,
4
- spender:: Spender ,
5
- validator:: { ApproveState , Heartbeat , MessageTypes , NewState , Type as MessageType } ,
6
- Address , Balances , CampaignId , ChainId , UnifiedMap , UnifiedNum , ValidatorId , IPFS ,
7
- } ;
8
1
use chrono:: {
9
2
serde:: ts_milliseconds, Date , DateTime , Datelike , Duration , NaiveDate , TimeZone , Timelike , Utc ,
10
3
} ;
@@ -20,6 +13,15 @@ use thiserror::Error;
20
13
21
14
pub use event:: { Event , EventType , CLICK , IMPRESSION } ;
22
15
16
+ use self :: message:: MessageResponse ;
17
+ use crate :: {
18
+ analytics:: { OperatingSystem , Timeframe } ,
19
+ balances:: BalancesState ,
20
+ spender:: Spender ,
21
+ validator:: { ApproveState , Heartbeat , NewState } ,
22
+ Address , Balances , CampaignId , ChainId , UnifiedMap , UnifiedNum , IPFS ,
23
+ } ;
24
+
23
25
#[ derive( Serialize , Deserialize , Debug , Clone , PartialEq , Eq ) ]
24
26
#[ serde( rename_all = "camelCase" ) ]
25
27
/// Channel Accounting response
@@ -47,19 +49,20 @@ pub struct LastApproved<S: BalancesState> {
47
49
pub approve_state : Option < MessageResponse < ApproveState > > ,
48
50
}
49
51
50
- #[ derive( Serialize , Deserialize , Clone , Debug , PartialEq , Eq ) ]
51
- pub struct MessageResponse < T : MessageType > {
52
- pub from : ValidatorId ,
53
- pub received : DateTime < Utc > ,
54
- pub msg : message:: Message < T > ,
55
- }
56
-
57
52
pub mod message {
58
53
use std:: ops:: Deref ;
59
54
60
- use crate :: validator:: messages:: * ;
55
+ use crate :: { validator:: messages:: * , ValidatorId } ;
56
+ use chrono:: { DateTime , Utc } ;
61
57
use serde:: { Deserialize , Serialize } ;
62
58
59
+ #[ derive( Serialize , Deserialize , Clone , Debug , PartialEq , Eq ) ]
60
+ pub struct MessageResponse < T : Type > {
61
+ pub from : ValidatorId ,
62
+ pub received : DateTime < Utc > ,
63
+ pub msg : Message < T > ,
64
+ }
65
+
63
66
#[ derive( Serialize , Deserialize , Clone , Debug , PartialEq , Eq ) ]
64
67
#[ serde( try_from = "MessageTypes" , into = "MessageTypes" ) ]
65
68
pub struct Message < T : Type > ( pub T ) ;
@@ -681,39 +684,6 @@ pub struct ChannelPayRequest {
681
684
pub payouts : UnifiedMap ,
682
685
}
683
686
684
- #[ derive( Serialize , Deserialize , Debug ) ]
685
- pub struct ValidatorMessage {
686
- pub from : ValidatorId ,
687
- pub received : DateTime < Utc > ,
688
- pub msg : MessageTypes ,
689
- }
690
-
691
- #[ derive( Serialize , Deserialize , Debug ) ]
692
- #[ serde( rename_all = "camelCase" ) ]
693
- pub struct ValidatorMessagesListResponse {
694
- pub messages : Vec < ValidatorMessage > ,
695
- }
696
-
697
- /// Contains all the different validator messages to be created.
698
- ///
699
- /// # Examples
700
- ///
701
- /// ```
702
- #[ doc = include_str ! ( "../examples/validator_messages_create_request.rs" ) ]
703
- /// ```
704
- #[ derive( Serialize , Deserialize , Debug ) ]
705
- #[ serde( rename_all = "camelCase" ) ]
706
- pub struct ValidatorMessagesCreateRequest {
707
- pub messages : Vec < MessageTypes > ,
708
- }
709
-
710
- #[ derive( Deserialize , Debug ) ]
711
- #[ serde( rename_all = "camelCase" ) ]
712
- pub struct ValidatorMessagesListQuery {
713
- /// Will apply the lower limit of: `query.limit` and `Config::msgs_find_limit`
714
- pub limit : Option < u64 > ,
715
- }
716
-
717
687
#[ derive( Serialize , Deserialize , Debug ) ]
718
688
#[ serde( rename_all = "camelCase" ) ]
719
689
pub struct ValidationErrorResponse {
@@ -776,6 +746,123 @@ pub mod channel_list {
776
746
}
777
747
}
778
748
749
+ pub mod validator_messages {
750
+ use std:: { fmt, str:: FromStr } ;
751
+
752
+ use chrono:: { DateTime , Utc } ;
753
+ use parse_display:: ParseError ;
754
+ use serde:: { Deserialize , Serialize } ;
755
+
756
+ use crate :: {
757
+ validator:: { MessageType , MessageTypes } ,
758
+ ValidatorId ,
759
+ } ;
760
+
761
+ #[ derive( Serialize , Deserialize , Debug ) ]
762
+ pub struct ValidatorMessage {
763
+ pub from : ValidatorId ,
764
+ pub received : DateTime < Utc > ,
765
+ pub msg : MessageTypes ,
766
+ }
767
+
768
+ #[ derive( Serialize , Deserialize , Debug ) ]
769
+ #[ serde( rename_all = "camelCase" ) ]
770
+ pub struct ValidatorMessagesListResponse {
771
+ pub messages : Vec < ValidatorMessage > ,
772
+ }
773
+
774
+ #[ derive( Deserialize , Debug ) ]
775
+ #[ serde( rename_all = "camelCase" ) ]
776
+ pub struct ValidatorMessagesListQuery {
777
+ /// Will apply the lower limit of: `query.limit` and `Config::msgs_find_limit`
778
+ pub limit : Option < u64 > ,
779
+ }
780
+
781
+ /// Message type filter (used in path)
782
+ ///
783
+ /// Expects url decoded string with [`MessageType`]s separated by `+`.
784
+ ///
785
+ ///
786
+ /// # Examples
787
+ ///
788
+ /// ```
789
+ /// use primitives::{validator::MessageType, sentry::validator_messages::MessageTypesFilter};
790
+ ///
791
+ /// let path_filter = "NewState+ApproveState+Heartbeat";
792
+ ///
793
+ /// let expected = MessageTypesFilter(vec![MessageType::NewState, MessageType::ApproveState, MessageType::Heartbeat]);
794
+ ///
795
+ /// assert_eq!(path_filter.parse::<MessageTypesFilter>().expect("Should deserialize"), expected);
796
+ /// assert_eq!(path_filter, String::from(expected));
797
+ /// ```
798
+ #[ derive( Serialize , Deserialize , Debug , Default , PartialEq , Eq , Clone ) ]
799
+ #[ serde( try_from = "String" , into = "String" ) ]
800
+ pub struct MessageTypesFilter ( pub Vec < MessageType > ) ;
801
+
802
+ impl fmt:: Display for MessageTypesFilter {
803
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
804
+ f. write_str (
805
+ & self
806
+ . 0
807
+ . iter ( )
808
+ . map ( |message_type| message_type. to_string ( ) )
809
+ . collect :: < Vec < _ > > ( )
810
+ . join ( "+" ) ,
811
+ )
812
+ }
813
+ }
814
+
815
+ impl FromStr for MessageTypesFilter {
816
+ type Err = ParseError ;
817
+
818
+ fn from_str ( filter : & str ) -> Result < Self , Self :: Err > {
819
+ let message_types = if !filter. is_empty ( ) {
820
+ filter
821
+ . split ( '+' )
822
+ . map ( |s| s. parse ( ) )
823
+ . collect :: < Result < _ , _ > > ( ) ?
824
+ } else {
825
+ vec ! [ ]
826
+ } ;
827
+
828
+ Ok ( MessageTypesFilter ( message_types) )
829
+ }
830
+ }
831
+
832
+ impl TryFrom < String > for MessageTypesFilter {
833
+ type Error = ParseError ;
834
+
835
+ fn try_from ( url_decoded_string : String ) -> Result < Self , Self :: Error > {
836
+ url_decoded_string. parse ( )
837
+ }
838
+ }
839
+
840
+ impl From < MessageTypesFilter > for String {
841
+ fn from ( message_types : MessageTypesFilter ) -> Self {
842
+ message_types. to_string ( )
843
+ }
844
+ }
845
+
846
+ impl AsRef < [ MessageType ] > for MessageTypesFilter {
847
+ fn as_ref ( & self ) -> & [ MessageType ] {
848
+ & self . 0
849
+ }
850
+ }
851
+
852
+ /// Contains all the different validator messages to be created.
853
+ ///
854
+ /// # Examples
855
+ ///
856
+ /// ```
857
+ #[ doc = include_str ! ( "../examples/validator_messages_create_request.rs" ) ]
858
+ /// ```
859
+ #[ derive( Serialize , Deserialize , Debug ) ]
860
+ #[ serde( rename_all = "camelCase" ) ]
861
+ pub struct ValidatorMessagesCreateRequest {
862
+ pub messages : Vec < MessageTypes > ,
863
+ }
864
+ }
865
+
779
866
pub mod campaign_list {
780
867
use crate :: { Address , Campaign , ValidatorId } ;
781
868
use chrono:: { serde:: ts_seconds, DateTime , Utc } ;
@@ -1065,23 +1152,24 @@ pub mod campaign_modify {
1065
1152
1066
1153
#[ cfg( feature = "postgres" ) ]
1067
1154
mod postgres {
1068
- use super :: {
1069
- Analytics , DateHour , EventType , FetchedAnalytics , FetchedMetric , MessageResponse ,
1070
- ValidatorMessage ,
1071
- } ;
1072
- use crate :: {
1073
- analytics:: { AnalyticsQuery , Metric } ,
1074
- validator:: { messages:: Type as MessageType , MessageTypes } ,
1075
- IPFS ,
1076
- } ;
1077
1155
use bytes:: BytesMut ;
1078
1156
use chrono:: { DateTime , Timelike , Utc } ;
1079
1157
use serde:: Deserialize ;
1080
1158
use tokio_postgres:: {
1081
- types:: { accepts, to_sql_checked, FromSql , IsNull , Json , ToSql , Type } ,
1159
+ types:: { accepts, to_sql_checked, FromSql , IsNull , Json , ToSql , Type as PgType } ,
1082
1160
Error , Row ,
1083
1161
} ;
1084
1162
1163
+ use super :: {
1164
+ message:: MessageResponse , validator_messages:: ValidatorMessage , Analytics , DateHour ,
1165
+ EventType , FetchedAnalytics , FetchedMetric ,
1166
+ } ;
1167
+ use crate :: {
1168
+ analytics:: { AnalyticsQuery , Metric } ,
1169
+ validator:: { MessageTypes , Type } ,
1170
+ IPFS ,
1171
+ } ;
1172
+
1085
1173
impl From < & Row > for ValidatorMessage {
1086
1174
fn from ( row : & Row ) -> Self {
1087
1175
Self {
@@ -1094,7 +1182,7 @@ mod postgres {
1094
1182
1095
1183
impl < T > TryFrom < & Row > for MessageResponse < T >
1096
1184
where
1097
- T : MessageType ,
1185
+ T : Type ,
1098
1186
for < ' de > T : Deserialize < ' de > ,
1099
1187
{
1100
1188
type Error = Error ;
@@ -1112,7 +1200,7 @@ mod postgres {
1112
1200
impl ToSql for MessageTypes {
1113
1201
fn to_sql (
1114
1202
& self ,
1115
- ty : & Type ,
1203
+ ty : & PgType ,
1116
1204
w : & mut BytesMut ,
1117
1205
) -> Result < IsNull , Box < dyn std:: error:: Error + Sync + Send > > {
1118
1206
Json ( self ) . to_sql ( ty, w)
@@ -1160,7 +1248,7 @@ mod postgres {
1160
1248
1161
1249
impl < ' a > FromSql < ' a > for DateHour < Utc > {
1162
1250
fn from_sql (
1163
- ty : & Type ,
1251
+ ty : & PgType ,
1164
1252
raw : & ' a [ u8 ] ,
1165
1253
) -> Result < Self , Box < dyn std:: error:: Error + Sync + Send > > {
1166
1254
let datetime = <DateTime < Utc > as FromSql >:: from_sql ( ty, raw) ?;
@@ -1179,7 +1267,7 @@ mod postgres {
1179
1267
impl ToSql for DateHour < Utc > {
1180
1268
fn to_sql (
1181
1269
& self ,
1182
- ty : & Type ,
1270
+ ty : & PgType ,
1183
1271
w : & mut BytesMut ,
1184
1272
) -> Result < IsNull , Box < dyn std:: error:: Error + Sync + Send > > {
1185
1273
self . date . and_hms ( self . hour , 0 , 0 ) . to_sql ( ty, w)
@@ -1191,7 +1279,7 @@ mod postgres {
1191
1279
1192
1280
impl < ' a > FromSql < ' a > for EventType {
1193
1281
fn from_sql (
1194
- ty : & Type ,
1282
+ ty : & PgType ,
1195
1283
raw : & ' a [ u8 ] ,
1196
1284
) -> Result < Self , Box < dyn std:: error:: Error + Sync + Send > > {
1197
1285
let event_string = <& str as FromSql >:: from_sql ( ty, raw) ?;
@@ -1204,7 +1292,7 @@ mod postgres {
1204
1292
impl ToSql for EventType {
1205
1293
fn to_sql (
1206
1294
& self ,
1207
- ty : & Type ,
1295
+ ty : & PgType ,
1208
1296
w : & mut BytesMut ,
1209
1297
) -> Result < IsNull , Box < dyn std:: error:: Error + Sync + Send > > {
1210
1298
self . as_str ( ) . to_sql ( ty, w)
0 commit comments