Categorize external types

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-09-02 23:47:11 +03:00
parent 4c98ed715d
commit c8df507d47
17 changed files with 120 additions and 102 deletions

View File

@@ -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,
},

View File

@@ -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);

View File

@@ -0,0 +1,3 @@
pub mod asset;
pub use asset::*;

View File

@@ -1,3 +1,2 @@
pub mod asset;
pub use asset::*;
pub mod incoming;
pub mod outgoing;

View File

View 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,

View File

@@ -1,4 +1,4 @@
use super::websocket::BarMessage;
use super::websocket::incoming::BarMessage;
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use time::OffsetDateTime;

View File

@@ -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,
}

View 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,
}

View 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),
}

View 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>>,
}

View 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,
}

View File

@@ -1,5 +1,2 @@
pub mod incoming;
pub mod outgoing;
pub use incoming::*;
pub use outgoing::*;

View 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 }
}
}

View 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),
}

View File

@@ -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>,