From c8df507d472f4a40dc0e0b977499f9883b1be67e Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Sat, 2 Sep 2023 23:47:11 +0300 Subject: [PATCH] Categorize external types Signed-off-by: Nikolaos Karaolidis --- backend/src/data/live.rs | 4 +- backend/src/routes/assets.rs | 2 +- backend/src/types/api/{ => incoming}/asset.rs | 0 backend/src/types/api/incoming/mod.rs | 3 + backend/src/types/api/mod.rs | 5 +- backend/src/types/api/outgoing/mod.rs | 0 backend/src/types/asset.rs | 4 +- backend/src/types/bar.rs | 2 +- backend/src/types/websocket/incoming.rs | 67 ------------------- backend/src/types/websocket/incoming/bar.rs | 25 +++++++ backend/src/types/websocket/incoming/mod.rs | 22 ++++++ .../types/websocket/incoming/subscription.rs | 17 +++++ .../src/types/websocket/incoming/success.rs | 14 ++++ backend/src/types/websocket/mod.rs | 3 - backend/src/types/websocket/outgoing/auth.rs | 13 ++++ backend/src/types/websocket/outgoing/mod.rs | 18 +++++ .../{outgoing.rs => outgoing/subscribe.rs} | 23 ------- 17 files changed, 120 insertions(+), 102 deletions(-) rename backend/src/types/api/{ => incoming}/asset.rs (100%) create mode 100644 backend/src/types/api/incoming/mod.rs create mode 100644 backend/src/types/api/outgoing/mod.rs delete mode 100644 backend/src/types/websocket/incoming.rs create mode 100644 backend/src/types/websocket/incoming/bar.rs create mode 100644 backend/src/types/websocket/incoming/mod.rs create mode 100644 backend/src/types/websocket/incoming/subscription.rs create mode 100644 backend/src/types/websocket/incoming/success.rs create mode 100644 backend/src/types/websocket/outgoing/auth.rs create mode 100644 backend/src/types/websocket/outgoing/mod.rs rename backend/src/types/websocket/{outgoing.rs => outgoing/subscribe.rs} (51%) diff --git a/backend/src/data/live.rs b/backend/src/data/live.rs index 313b8f1..c563895 100644 --- a/backend/src/data/live.rs +++ b/backend/src/data/live.rs @@ -3,8 +3,8 @@ use crate::{ database::{assets::get_assets_with_class, bars::add_bar}, types::{ websocket::{ - AuthMessage, IncomingMessage, OutgoingMessage, SubscribeMessage, SuccessMessage, - SuccessMessageType, + incoming::{IncomingMessage, SuccessMessage, SuccessMessageType}, + outgoing::{AuthMessage, OutgoingMessage, SubscribeMessage}, }, AssetBroadcastMessage, Bar, Class, }, diff --git a/backend/src/routes/assets.rs b/backend/src/routes/assets.rs index 1819a9f..50d3e18 100644 --- a/backend/src/routes/assets.rs +++ b/backend/src/routes/assets.rs @@ -72,7 +72,7 @@ pub async fn add_asset( _ => StatusCode::INTERNAL_SERVER_ERROR, })?; - let asset = asset.json::().await.unwrap(); + let asset = asset.json::().await.unwrap(); if asset.status != Status::Active || !asset.tradable || !asset.fractionable { return Err(StatusCode::FORBIDDEN); diff --git a/backend/src/types/api/asset.rs b/backend/src/types/api/incoming/asset.rs similarity index 100% rename from backend/src/types/api/asset.rs rename to backend/src/types/api/incoming/asset.rs diff --git a/backend/src/types/api/incoming/mod.rs b/backend/src/types/api/incoming/mod.rs new file mode 100644 index 0000000..00c8a86 --- /dev/null +++ b/backend/src/types/api/incoming/mod.rs @@ -0,0 +1,3 @@ +pub mod asset; + +pub use asset::*; diff --git a/backend/src/types/api/mod.rs b/backend/src/types/api/mod.rs index 00c8a86..9aac270 100644 --- a/backend/src/types/api/mod.rs +++ b/backend/src/types/api/mod.rs @@ -1,3 +1,2 @@ -pub mod asset; - -pub use asset::*; +pub mod incoming; +pub mod outgoing; diff --git a/backend/src/types/api/outgoing/mod.rs b/backend/src/types/api/outgoing/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/types/asset.rs b/backend/src/types/asset.rs index ec753a4..cd77b13 100644 --- a/backend/src/types/asset.rs +++ b/backend/src/types/asset.rs @@ -12,8 +12,8 @@ pub struct Asset { pub date_added: OffsetDateTime, } -impl From for Asset { - fn from(asset: api::Asset) -> Self { +impl From for Asset { + fn from(asset: api::incoming::Asset) -> Self { Self { symbol: asset.symbol, class: asset.class, diff --git a/backend/src/types/bar.rs b/backend/src/types/bar.rs index 83548cb..c89f529 100644 --- a/backend/src/types/bar.rs +++ b/backend/src/types/bar.rs @@ -1,4 +1,4 @@ -use super::websocket::BarMessage; +use super::websocket::incoming::BarMessage; use serde::{Deserialize, Serialize}; use sqlx::FromRow; use time::OffsetDateTime; diff --git a/backend/src/types/websocket/incoming.rs b/backend/src/types/websocket/incoming.rs deleted file mode 100644 index 98073d2..0000000 --- a/backend/src/types/websocket/incoming.rs +++ /dev/null @@ -1,67 +0,0 @@ -use serde::Deserialize; -use time::OffsetDateTime; - -#[derive(Debug, Deserialize, PartialEq)] -#[serde(tag = "T")] -pub enum IncomingMessage { - #[serde(rename = "success")] - Success(SuccessMessage), - #[serde(rename = "subscription")] - Subscription(SubscriptionMessage), - #[serde(rename = "b")] - Bars(BarMessage), - #[serde(rename = "u")] - UpdatedBars(BarMessage), -} - -#[derive(Debug, PartialEq, Deserialize)] -pub enum SuccessMessageType { - #[serde(rename = "connected")] - Connected, - #[serde(rename = "authenticated")] - Authenticated, -} - -#[derive(Debug, PartialEq, Deserialize)] -pub struct SuccessMessage { - pub msg: SuccessMessageType, -} - -#[derive(Debug, PartialEq, Deserialize)] -pub struct SubscriptionMessage { - pub trades: Vec, - pub quotes: Vec, - pub bars: Vec, - #[serde(rename = "updatedBars")] - pub updated_bars: Vec, - #[serde(rename = "dailyBars")] - pub daily_bars: Vec, - pub orderbooks: Option>, - pub statuses: Option>, - pub lulds: Option>, - #[serde(rename = "cancelErrors")] - pub cancel_errors: Option>, -} - -#[derive(Debug, PartialEq, Deserialize)] -pub struct BarMessage { - #[serde(rename = "t")] - #[serde(with = "time::serde::rfc3339")] - pub timestamp: OffsetDateTime, - #[serde(rename = "S")] - pub symbol: String, - #[serde(rename = "o")] - pub open: f64, - #[serde(rename = "h")] - pub high: f64, - #[serde(rename = "l")] - pub low: f64, - #[serde(rename = "c")] - pub close: f64, - #[serde(rename = "v")] - pub volume: f64, - #[serde(rename = "n")] - pub num_trades: i64, - #[serde(rename = "vw")] - pub volume_weighted: f64, -} diff --git a/backend/src/types/websocket/incoming/bar.rs b/backend/src/types/websocket/incoming/bar.rs new file mode 100644 index 0000000..c7c69c9 --- /dev/null +++ b/backend/src/types/websocket/incoming/bar.rs @@ -0,0 +1,25 @@ +use serde::Deserialize; +use time::OffsetDateTime; + +#[derive(Debug, PartialEq, Deserialize)] +pub struct BarMessage { + #[serde(rename = "t")] + #[serde(with = "time::serde::rfc3339")] + pub timestamp: OffsetDateTime, + #[serde(rename = "S")] + pub symbol: String, + #[serde(rename = "o")] + pub open: f64, + #[serde(rename = "h")] + pub high: f64, + #[serde(rename = "l")] + pub low: f64, + #[serde(rename = "c")] + pub close: f64, + #[serde(rename = "v")] + pub volume: f64, + #[serde(rename = "n")] + pub num_trades: i64, + #[serde(rename = "vw")] + pub volume_weighted: f64, +} diff --git a/backend/src/types/websocket/incoming/mod.rs b/backend/src/types/websocket/incoming/mod.rs new file mode 100644 index 0000000..82a92ef --- /dev/null +++ b/backend/src/types/websocket/incoming/mod.rs @@ -0,0 +1,22 @@ +pub mod bar; +pub mod subscription; +pub mod success; + +pub use bar::*; +pub use subscription::*; +pub use success::*; + +use serde::Deserialize; + +#[derive(Debug, Deserialize, PartialEq)] +#[serde(tag = "T")] +pub enum IncomingMessage { + #[serde(rename = "success")] + Success(SuccessMessage), + #[serde(rename = "subscription")] + Subscription(SubscriptionMessage), + #[serde(rename = "b")] + Bars(BarMessage), + #[serde(rename = "u")] + UpdatedBars(BarMessage), +} diff --git a/backend/src/types/websocket/incoming/subscription.rs b/backend/src/types/websocket/incoming/subscription.rs new file mode 100644 index 0000000..af251dd --- /dev/null +++ b/backend/src/types/websocket/incoming/subscription.rs @@ -0,0 +1,17 @@ +use serde::Deserialize; + +#[derive(Debug, PartialEq, Deserialize)] +pub struct SubscriptionMessage { + pub trades: Vec, + pub quotes: Vec, + pub bars: Vec, + #[serde(rename = "updatedBars")] + pub updated_bars: Vec, + #[serde(rename = "dailyBars")] + pub daily_bars: Vec, + pub orderbooks: Option>, + pub statuses: Option>, + pub lulds: Option>, + #[serde(rename = "cancelErrors")] + pub cancel_errors: Option>, +} diff --git a/backend/src/types/websocket/incoming/success.rs b/backend/src/types/websocket/incoming/success.rs new file mode 100644 index 0000000..0415760 --- /dev/null +++ b/backend/src/types/websocket/incoming/success.rs @@ -0,0 +1,14 @@ +use serde::Deserialize; + +#[derive(Debug, PartialEq, Deserialize)] +pub enum SuccessMessageType { + #[serde(rename = "connected")] + Connected, + #[serde(rename = "authenticated")] + Authenticated, +} + +#[derive(Debug, PartialEq, Deserialize)] +pub struct SuccessMessage { + pub msg: SuccessMessageType, +} diff --git a/backend/src/types/websocket/mod.rs b/backend/src/types/websocket/mod.rs index 58f5a05..9aac270 100644 --- a/backend/src/types/websocket/mod.rs +++ b/backend/src/types/websocket/mod.rs @@ -1,5 +1,2 @@ pub mod incoming; pub mod outgoing; - -pub use incoming::*; -pub use outgoing::*; diff --git a/backend/src/types/websocket/outgoing/auth.rs b/backend/src/types/websocket/outgoing/auth.rs new file mode 100644 index 0000000..b20375b --- /dev/null +++ b/backend/src/types/websocket/outgoing/auth.rs @@ -0,0 +1,13 @@ +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub struct AuthMessage { + key: String, + secret: String, +} + +impl AuthMessage { + pub fn new(key: String, secret: String) -> Self { + Self { key, secret } + } +} diff --git a/backend/src/types/websocket/outgoing/mod.rs b/backend/src/types/websocket/outgoing/mod.rs new file mode 100644 index 0000000..95a111c --- /dev/null +++ b/backend/src/types/websocket/outgoing/mod.rs @@ -0,0 +1,18 @@ +pub mod auth; +pub mod subscribe; + +pub use auth::*; +pub use subscribe::*; + +use serde::Serialize; + +#[derive(Debug, Serialize)] +#[serde(tag = "action")] +pub enum OutgoingMessage { + #[serde(rename = "auth")] + Auth(AuthMessage), + #[serde(rename = "subscribe")] + Subscribe(SubscribeMessage), + #[serde(rename = "unsubscribe")] + Unsubscribe(SubscribeMessage), +} diff --git a/backend/src/types/websocket/outgoing.rs b/backend/src/types/websocket/outgoing/subscribe.rs similarity index 51% rename from backend/src/types/websocket/outgoing.rs rename to backend/src/types/websocket/outgoing/subscribe.rs index e6bfa2c..dea1a4b 100644 --- a/backend/src/types/websocket/outgoing.rs +++ b/backend/src/types/websocket/outgoing/subscribe.rs @@ -1,28 +1,5 @@ use serde::Serialize; -#[derive(Debug, Serialize)] -#[serde(tag = "action")] -pub enum OutgoingMessage { - #[serde(rename = "auth")] - Auth(AuthMessage), - #[serde(rename = "subscribe")] - Subscribe(SubscribeMessage), - #[serde(rename = "unsubscribe")] - Unsubscribe(SubscribeMessage), -} - -#[derive(Debug, Serialize)] -pub struct AuthMessage { - key: String, - secret: String, -} - -impl AuthMessage { - pub fn new(key: String, secret: String) -> Self { - Self { key, secret } - } -} - #[derive(Debug, Serialize)] pub struct SubscribeMessage { bars: Vec,