Skip to content

Commit ffd30e8

Browse files
committed
Merge branch 'aip-61-adex-v5' into additional-tests
2 parents 98f89b3 + 32b6b92 commit ffd30e8

21 files changed

+371
-144
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

adapter/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ license = "AGPL-3.0"
1616
test-util = ["primitives/test-util"]
1717

1818
[dependencies]
19-
primitives = { path = "../primitives" }
19+
primitives = { version = "0.2", path = "../primitives" }
2020

2121
# For Ethereum client
2222
web3 = { version = "0.18", features = ["http-tls", "signing"] }
@@ -40,7 +40,7 @@ parse-display = "0.5"
4040

4141
[dev-dependencies]
4242
# we require the test-util future for testing
43-
primitives = { path = "../primitives", features = ["test-util"] }
43+
primitives = { version = "0.2", path = "../primitives", features = ["test-util"] }
4444

4545
byteorder = "1.4"
4646
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

adview-manager/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ rustdoc-args = ["--cfg", "docsrs"]
1111

1212
[dependencies]
1313
# Domain
14-
adex_primitives = { version = "0.2.0", path = "../primitives", package = "primitives" }
14+
adex_primitives = { version = "0.2", path = "../primitives", package = "primitives" }
1515
chrono = "0.4"
1616
num-integer = "0.1"
1717
# (De)Serialization & Http requests
@@ -30,4 +30,4 @@ rand = "0.8"
3030

3131
[dev-dependencies]
3232
# enable the `test-util` only in dev
33-
adex_primitives = { version = "0.2.0", path = "../primitives", package = "primitives", features = ["test-util"] }
33+
adex_primitives = { version = "0.2", path = "../primitives", package = "primitives", features = ["test-util"] }

primitives/examples/validator_messages_create_request.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use primitives::sentry::ValidatorMessagesCreateRequest;
1+
use primitives::sentry::validator_messages::ValidatorMessagesCreateRequest;
22
use serde_json::{from_value, json};
33

44
fn main() {

primitives/examples/validator_messages_list_query.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use primitives::sentry::ValidatorMessagesListQuery;
1+
use primitives::sentry::validator_messages::ValidatorMessagesListQuery;
22

33
fn main() {
44
// Empty query - default values only

primitives/examples/validator_messages_list_response.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use primitives::sentry::ValidatorMessagesListResponse;
1+
use primitives::sentry::validator_messages::ValidatorMessagesListResponse;
22
use serde_json::{from_value, json};
33

44
fn main() {

primitives/src/config.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ pub struct Config {
7979
/// In milliseconds
8080
#[serde(with = "std_duration_millis")]
8181
pub wait_time: Duration,
82-
/// The maximum allowed limit of [`ValidatorMessage`](crate::sentry::ValidatorMessage)s per page
82+
/// The maximum allowed limit of [`ValidatorMessage`](crate::sentry::validator_messages::ValidatorMessage)s per page
8383
/// returned by Sentry's GET `/v5/channel/0xXXX.../validator-messages` route.
8484
///
8585
/// Request query also has a `limit` parameter, which can be used to return
8686
/// <= `msgs_find_limit` messages in the request.
8787
///
88-
/// Also see: [`ValidatorMessagesListResponse`](crate::sentry::ValidatorMessagesListResponse),
89-
/// [`ValidatorMessagesListQuery`](crate::sentry::ValidatorMessagesListQuery)
88+
/// Also see: [`ValidatorMessagesListResponse`](crate::sentry::validator_messages::ValidatorMessagesListResponse),
89+
/// [`ValidatorMessagesListQuery`](crate::sentry::validator_messages::ValidatorMessagesListQuery)
9090
pub msgs_find_limit: u32,
9191
/// The maximum allowed limit of [`FetchedAnalytics`](crate::sentry::FetchedAnalytics)s per page
9292
/// returned by Sentry's GET `/v5/analytics` routes:

primitives/src/sentry.rs

Lines changed: 152 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
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-
};
81
use chrono::{
92
serde::ts_milliseconds, Date, DateTime, Datelike, Duration, NaiveDate, TimeZone, Timelike, Utc,
103
};
@@ -20,6 +13,15 @@ use thiserror::Error;
2013

2114
pub use event::{Event, EventType, CLICK, IMPRESSION};
2215

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+
2325
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
2426
#[serde(rename_all = "camelCase")]
2527
/// Channel Accounting response
@@ -47,19 +49,20 @@ pub struct LastApproved<S: BalancesState> {
4749
pub approve_state: Option<MessageResponse<ApproveState>>,
4850
}
4951

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-
5752
pub mod message {
5853
use std::ops::Deref;
5954

60-
use crate::validator::messages::*;
55+
use crate::{validator::messages::*, ValidatorId};
56+
use chrono::{DateTime, Utc};
6157
use serde::{Deserialize, Serialize};
6258

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+
6366
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
6467
#[serde(try_from = "MessageTypes", into = "MessageTypes")]
6568
pub struct Message<T: Type>(pub T);
@@ -681,39 +684,6 @@ pub struct ChannelPayRequest {
681684
pub payouts: UnifiedMap,
682685
}
683686

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-
717687
#[derive(Serialize, Deserialize, Debug)]
718688
#[serde(rename_all = "camelCase")]
719689
pub struct ValidationErrorResponse {
@@ -776,6 +746,123 @@ pub mod channel_list {
776746
}
777747
}
778748

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+
779866
pub mod campaign_list {
780867
use crate::{Address, Campaign, ValidatorId};
781868
use chrono::{serde::ts_seconds, DateTime, Utc};
@@ -1065,23 +1152,24 @@ pub mod campaign_modify {
10651152

10661153
#[cfg(feature = "postgres")]
10671154
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-
};
10771155
use bytes::BytesMut;
10781156
use chrono::{DateTime, Timelike, Utc};
10791157
use serde::Deserialize;
10801158
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},
10821160
Error, Row,
10831161
};
10841162

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+
10851173
impl From<&Row> for ValidatorMessage {
10861174
fn from(row: &Row) -> Self {
10871175
Self {
@@ -1094,7 +1182,7 @@ mod postgres {
10941182

10951183
impl<T> TryFrom<&Row> for MessageResponse<T>
10961184
where
1097-
T: MessageType,
1185+
T: Type,
10981186
for<'de> T: Deserialize<'de>,
10991187
{
11001188
type Error = Error;
@@ -1112,7 +1200,7 @@ mod postgres {
11121200
impl ToSql for MessageTypes {
11131201
fn to_sql(
11141202
&self,
1115-
ty: &Type,
1203+
ty: &PgType,
11161204
w: &mut BytesMut,
11171205
) -> Result<IsNull, Box<dyn std::error::Error + Sync + Send>> {
11181206
Json(self).to_sql(ty, w)
@@ -1160,7 +1248,7 @@ mod postgres {
11601248

11611249
impl<'a> FromSql<'a> for DateHour<Utc> {
11621250
fn from_sql(
1163-
ty: &Type,
1251+
ty: &PgType,
11641252
raw: &'a [u8],
11651253
) -> Result<Self, Box<dyn std::error::Error + Sync + Send>> {
11661254
let datetime = <DateTime<Utc> as FromSql>::from_sql(ty, raw)?;
@@ -1179,7 +1267,7 @@ mod postgres {
11791267
impl ToSql for DateHour<Utc> {
11801268
fn to_sql(
11811269
&self,
1182-
ty: &Type,
1270+
ty: &PgType,
11831271
w: &mut BytesMut,
11841272
) -> Result<IsNull, Box<dyn std::error::Error + Sync + Send>> {
11851273
self.date.and_hms(self.hour, 0, 0).to_sql(ty, w)
@@ -1191,7 +1279,7 @@ mod postgres {
11911279

11921280
impl<'a> FromSql<'a> for EventType {
11931281
fn from_sql(
1194-
ty: &Type,
1282+
ty: &PgType,
11951283
raw: &'a [u8],
11961284
) -> Result<Self, Box<dyn std::error::Error + Sync + Send>> {
11971285
let event_string = <&str as FromSql>::from_sql(ty, raw)?;
@@ -1204,7 +1292,7 @@ mod postgres {
12041292
impl ToSql for EventType {
12051293
fn to_sql(
12061294
&self,
1207-
ty: &Type,
1295+
ty: &PgType,
12081296
w: &mut BytesMut,
12091297
) -> Result<IsNull, Box<dyn std::error::Error + Sync + Send>> {
12101298
self.as_str().to_sql(ty, w)

0 commit comments

Comments
 (0)