Categorize external types
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -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,
|
||||
},
|
||||
|
@@ -72,7 +72,7 @@ pub async fn add_asset(
|
||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
})?;
|
||||
|
||||
let asset = asset.json::<api::Asset>().await.unwrap();
|
||||
let asset = asset.json::<api::incoming::Asset>().await.unwrap();
|
||||
|
||||
if asset.status != Status::Active || !asset.tradable || !asset.fractionable {
|
||||
return Err(StatusCode::FORBIDDEN);
|
||||
|
3
backend/src/types/api/incoming/mod.rs
Normal file
3
backend/src/types/api/incoming/mod.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
pub mod asset;
|
||||
|
||||
pub use asset::*;
|
@@ -1,3 +1,2 @@
|
||||
pub mod asset;
|
||||
|
||||
pub use asset::*;
|
||||
pub mod incoming;
|
||||
pub mod outgoing;
|
||||
|
0
backend/src/types/api/outgoing/mod.rs
Normal file
0
backend/src/types/api/outgoing/mod.rs
Normal file
@@ -12,8 +12,8 @@ pub struct Asset {
|
||||
pub date_added: OffsetDateTime,
|
||||
}
|
||||
|
||||
impl From<api::Asset> for Asset {
|
||||
fn from(asset: api::Asset) -> Self {
|
||||
impl From<api::incoming::Asset> for Asset {
|
||||
fn from(asset: api::incoming::Asset) -> Self {
|
||||
Self {
|
||||
symbol: asset.symbol,
|
||||
class: asset.class,
|
||||
|
@@ -1,4 +1,4 @@
|
||||
use super::websocket::BarMessage;
|
||||
use super::websocket::incoming::BarMessage;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::FromRow;
|
||||
use time::OffsetDateTime;
|
||||
|
@@ -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<String>,
|
||||
pub quotes: Vec<String>,
|
||||
pub bars: Vec<String>,
|
||||
#[serde(rename = "updatedBars")]
|
||||
pub updated_bars: Vec<String>,
|
||||
#[serde(rename = "dailyBars")]
|
||||
pub daily_bars: Vec<String>,
|
||||
pub orderbooks: Option<Vec<String>>,
|
||||
pub statuses: Option<Vec<String>>,
|
||||
pub lulds: Option<Vec<String>>,
|
||||
#[serde(rename = "cancelErrors")]
|
||||
pub cancel_errors: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
#[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,
|
||||
}
|
25
backend/src/types/websocket/incoming/bar.rs
Normal file
25
backend/src/types/websocket/incoming/bar.rs
Normal file
@@ -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,
|
||||
}
|
22
backend/src/types/websocket/incoming/mod.rs
Normal file
22
backend/src/types/websocket/incoming/mod.rs
Normal file
@@ -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),
|
||||
}
|
17
backend/src/types/websocket/incoming/subscription.rs
Normal file
17
backend/src/types/websocket/incoming/subscription.rs
Normal file
@@ -0,0 +1,17 @@
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Debug, PartialEq, Deserialize)]
|
||||
pub struct SubscriptionMessage {
|
||||
pub trades: Vec<String>,
|
||||
pub quotes: Vec<String>,
|
||||
pub bars: Vec<String>,
|
||||
#[serde(rename = "updatedBars")]
|
||||
pub updated_bars: Vec<String>,
|
||||
#[serde(rename = "dailyBars")]
|
||||
pub daily_bars: Vec<String>,
|
||||
pub orderbooks: Option<Vec<String>>,
|
||||
pub statuses: Option<Vec<String>>,
|
||||
pub lulds: Option<Vec<String>>,
|
||||
#[serde(rename = "cancelErrors")]
|
||||
pub cancel_errors: Option<Vec<String>>,
|
||||
}
|
14
backend/src/types/websocket/incoming/success.rs
Normal file
14
backend/src/types/websocket/incoming/success.rs
Normal file
@@ -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,
|
||||
}
|
@@ -1,5 +1,2 @@
|
||||
pub mod incoming;
|
||||
pub mod outgoing;
|
||||
|
||||
pub use incoming::*;
|
||||
pub use outgoing::*;
|
||||
|
13
backend/src/types/websocket/outgoing/auth.rs
Normal file
13
backend/src/types/websocket/outgoing/auth.rs
Normal file
@@ -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 }
|
||||
}
|
||||
}
|
18
backend/src/types/websocket/outgoing/mod.rs
Normal file
18
backend/src/types/websocket/outgoing/mod.rs
Normal file
@@ -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),
|
||||
}
|
@@ -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<String>,
|
Reference in New Issue
Block a user