pub mod amm_cache_row;
pub mod amm_constituent_mapping_row;
pub mod constituent_correlations_row;
pub mod constituent_row;
pub mod constituent_target_base_row;
pub mod fuel_overflow_row;
pub mod high_leverage_mode_config_row;
pub mod if_rebalance_config_row;
pub mod insurance_fund_stake_row;
pub mod l_p_pool_row;
pub mod openbook_v2_fulfillment_config_row;
pub mod perp_market_row;
pub mod phoenix_v1_fulfillment_config_row;
pub mod prelaunch_oracle_row;
pub mod protected_maker_mode_config_row;
pub mod protocol_if_shares_transfer_config_row;
pub mod pyth_lazer_oracle_row;
pub mod referrer_name_row;
pub mod revenue_share_escrow_row;
pub mod revenue_share_row;
pub mod serum_v3_fulfillment_config_row;
pub mod signed_msg_user_orders_row;
pub mod signed_msg_ws_delegates_row;
pub mod spot_market_row;
pub mod state_row;
pub mod user_row;
pub mod user_stats_row;
pub use self::{
amm_cache_row::*, amm_constituent_mapping_row::*, constituent_correlations_row::*,
constituent_row::*, constituent_target_base_row::*, fuel_overflow_row::*,
high_leverage_mode_config_row::*, if_rebalance_config_row::*, insurance_fund_stake_row::*,
l_p_pool_row::*, openbook_v2_fulfillment_config_row::*, perp_market_row::*,
phoenix_v1_fulfillment_config_row::*, prelaunch_oracle_row::*,
protected_maker_mode_config_row::*, protocol_if_shares_transfer_config_row::*,
pyth_lazer_oracle_row::*, referrer_name_row::*, revenue_share_escrow_row::*,
revenue_share_row::*, serum_v3_fulfillment_config_row::*, signed_msg_user_orders_row::*,
signed_msg_ws_delegates_row::*, spot_market_row::*, state_row::*, user_row::*,
user_stats_row::*,
};
use super::DriftV2Account;
pub struct DriftV2AccountsMigration;
impl sqlx_migrator::Migration<sqlx::Postgres> for DriftV2AccountsMigration {
fn app(&self) -> &str {
"drift-v2"
}
fn name(&self) -> &str {
"drift_v2_accounts"
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
vec![
Box::new(AmmCacheMigrationOperation),
Box::new(AmmConstituentMappingMigrationOperation),
Box::new(ConstituentMigrationOperation),
Box::new(ConstituentCorrelationsMigrationOperation),
Box::new(ConstituentTargetBaseMigrationOperation),
Box::new(FuelOverflowMigrationOperation),
Box::new(HighLeverageModeConfigMigrationOperation),
Box::new(IfRebalanceConfigMigrationOperation),
Box::new(InsuranceFundStakeMigrationOperation),
Box::new(LPPoolMigrationOperation),
Box::new(OpenbookV2FulfillmentConfigMigrationOperation),
Box::new(PerpMarketMigrationOperation),
Box::new(PhoenixV1FulfillmentConfigMigrationOperation),
Box::new(PrelaunchOracleMigrationOperation),
Box::new(ProtectedMakerModeConfigMigrationOperation),
Box::new(ProtocolIfSharesTransferConfigMigrationOperation),
Box::new(PythLazerOracleMigrationOperation),
Box::new(ReferrerNameMigrationOperation),
Box::new(RevenueShareMigrationOperation),
Box::new(RevenueShareEscrowMigrationOperation),
Box::new(SerumV3FulfillmentConfigMigrationOperation),
Box::new(SignedMsgUserOrdersMigrationOperation),
Box::new(SignedMsgWsDelegatesMigrationOperation),
Box::new(SpotMarketMigrationOperation),
Box::new(StateMigrationOperation),
Box::new(UserMigrationOperation),
Box::new(UserStatsMigrationOperation),
]
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
vec![]
}
}
pub struct DriftV2AccountWithMetadata(
pub DriftV2Account,
pub carbon_core::account::AccountMetadata,
);
impl From<(DriftV2Account, carbon_core::account::AccountMetadata)> for DriftV2AccountWithMetadata {
fn from(value: (DriftV2Account, carbon_core::account::AccountMetadata)) -> Self {
DriftV2AccountWithMetadata(value.0, value.1)
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for DriftV2AccountWithMetadata {
async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let DriftV2AccountWithMetadata(account, metadata) = self;
match account {
DriftV2Account::AmmCache(account) => {
let row =
amm_cache_row::AmmCacheRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::OpenbookV2FulfillmentConfig(account) => {
let row =
openbook_v2_fulfillment_config_row::OpenbookV2FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::PhoenixV1FulfillmentConfig(account) => {
let row =
phoenix_v1_fulfillment_config_row::PhoenixV1FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::SerumV3FulfillmentConfig(account) => {
let row = serum_v3_fulfillment_config_row::SerumV3FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::HighLeverageModeConfig(account) => {
let row = high_leverage_mode_config_row::HighLeverageModeConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::IfRebalanceConfig(account) => {
let row = if_rebalance_config_row::IfRebalanceConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::InsuranceFundStake(account) => {
let row = insurance_fund_stake_row::InsuranceFundStakeRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::ProtocolIfSharesTransferConfig(account) => {
let row = protocol_if_shares_transfer_config_row::ProtocolIfSharesTransferConfigRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::LPPool(account) => {
let row = l_p_pool_row::LPPoolRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::Constituent(account) => {
let row =
constituent_row::ConstituentRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::AmmConstituentMapping(account) => {
let row = amm_constituent_mapping_row::AmmConstituentMappingRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::ConstituentTargetBase(account) => {
let row = constituent_target_base_row::ConstituentTargetBaseRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::ConstituentCorrelations(account) => {
let row = constituent_correlations_row::ConstituentCorrelationsRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::PrelaunchOracle(account) => {
let row = prelaunch_oracle_row::PrelaunchOracleRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::PerpMarket(account) => {
let row =
perp_market_row::PerpMarketRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::ProtectedMakerModeConfig(account) => {
let row = protected_maker_mode_config_row::ProtectedMakerModeConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::PythLazerOracle(account) => {
let row = pyth_lazer_oracle_row::PythLazerOracleRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::RevenueShare(account) => {
let row = revenue_share_row::RevenueShareRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::RevenueShareEscrow(account) => {
let row = revenue_share_escrow_row::RevenueShareEscrowRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::SignedMsgUserOrders(account) => {
let row = signed_msg_user_orders_row::SignedMsgUserOrdersRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::SignedMsgWsDelegates(account) => {
let row = signed_msg_ws_delegates_row::SignedMsgWsDelegatesRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::SpotMarket(account) => {
let row =
spot_market_row::SpotMarketRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::State(account) => {
let row = state_row::StateRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::User(account) => {
let row = user_row::UserRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::UserStats(account) => {
let row =
user_stats_row::UserStatsRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
DriftV2Account::ReferrerName(account) => {
let row = referrer_name_row::ReferrerNameRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
DriftV2Account::FuelOverflow(account) => {
let row = fuel_overflow_row::FuelOverflowRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
}
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for DriftV2AccountWithMetadata {
async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let DriftV2AccountWithMetadata(account, metadata) = self;
match account {
DriftV2Account::AmmCache(account) => {
let row =
amm_cache_row::AmmCacheRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::OpenbookV2FulfillmentConfig(account) => {
let row =
openbook_v2_fulfillment_config_row::OpenbookV2FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::PhoenixV1FulfillmentConfig(account) => {
let row =
phoenix_v1_fulfillment_config_row::PhoenixV1FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::SerumV3FulfillmentConfig(account) => {
let row = serum_v3_fulfillment_config_row::SerumV3FulfillmentConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::HighLeverageModeConfig(account) => {
let row = high_leverage_mode_config_row::HighLeverageModeConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::IfRebalanceConfig(account) => {
let row = if_rebalance_config_row::IfRebalanceConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::InsuranceFundStake(account) => {
let row = insurance_fund_stake_row::InsuranceFundStakeRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::ProtocolIfSharesTransferConfig(account) => {
let row = protocol_if_shares_transfer_config_row::ProtocolIfSharesTransferConfigRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::LPPool(account) => {
let row = l_p_pool_row::LPPoolRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::Constituent(account) => {
let row =
constituent_row::ConstituentRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::AmmConstituentMapping(account) => {
let row = amm_constituent_mapping_row::AmmConstituentMappingRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::ConstituentTargetBase(account) => {
let row = constituent_target_base_row::ConstituentTargetBaseRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::ConstituentCorrelations(account) => {
let row = constituent_correlations_row::ConstituentCorrelationsRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::PrelaunchOracle(account) => {
let row = prelaunch_oracle_row::PrelaunchOracleRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::PerpMarket(account) => {
let row =
perp_market_row::PerpMarketRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::ProtectedMakerModeConfig(account) => {
let row = protected_maker_mode_config_row::ProtectedMakerModeConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::PythLazerOracle(account) => {
let row = pyth_lazer_oracle_row::PythLazerOracleRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::RevenueShare(account) => {
let row = revenue_share_row::RevenueShareRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::RevenueShareEscrow(account) => {
let row = revenue_share_escrow_row::RevenueShareEscrowRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::SignedMsgUserOrders(account) => {
let row = signed_msg_user_orders_row::SignedMsgUserOrdersRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::SignedMsgWsDelegates(account) => {
let row = signed_msg_ws_delegates_row::SignedMsgWsDelegatesRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::SpotMarket(account) => {
let row =
spot_market_row::SpotMarketRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::State(account) => {
let row = state_row::StateRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::User(account) => {
let row = user_row::UserRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::UserStats(account) => {
let row =
user_stats_row::UserStatsRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::ReferrerName(account) => {
let row = referrer_name_row::ReferrerNameRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
DriftV2Account::FuelOverflow(account) => {
let row = fuel_overflow_row::FuelOverflowRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
}
}
}