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},
|
database::{assets::get_assets_with_class, bars::add_bar},
|
||||||
types::{
|
types::{
|
||||||
websocket::{
|
websocket::{
|
||||||
AuthMessage, IncomingMessage, OutgoingMessage, SubscribeMessage, SuccessMessage,
|
incoming::{IncomingMessage, SuccessMessage, SuccessMessageType},
|
||||||
SuccessMessageType,
|
outgoing::{AuthMessage, OutgoingMessage, SubscribeMessage},
|
||||||
},
|
},
|
||||||
AssetBroadcastMessage, Bar, Class,
|
AssetBroadcastMessage, Bar, Class,
|
||||||
},
|
},
|
||||||
|
@@ -72,7 +72,7 @@ pub async fn add_asset(
|
|||||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
_ => 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 {
|
if asset.status != Status::Active || !asset.tradable || !asset.fractionable {
|
||||||
return Err(StatusCode::FORBIDDEN);
|
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 mod incoming;
|
||||||
|
pub mod outgoing;
|
||||||
pub use asset::*;
|
|
||||||
|
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,
|
pub date_added: OffsetDateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<api::Asset> for Asset {
|
impl From<api::incoming::Asset> for Asset {
|
||||||
fn from(asset: api::Asset) -> Self {
|
fn from(asset: api::incoming::Asset) -> Self {
|
||||||
Self {
|
Self {
|
||||||
symbol: asset.symbol,
|
symbol: asset.symbol,
|
||||||
class: asset.class,
|
class: asset.class,
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
use super::websocket::BarMessage;
|
use super::websocket::incoming::BarMessage;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::FromRow;
|
use sqlx::FromRow;
|
||||||
use time::OffsetDateTime;
|
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 incoming;
|
||||||
pub mod outgoing;
|
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;
|
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)]
|
#[derive(Debug, Serialize)]
|
||||||
pub struct SubscribeMessage {
|
pub struct SubscribeMessage {
|
||||||
bars: Vec<String>,
|
bars: Vec<String>,
|
Reference in New Issue
Block a user