pub mod liquidity_pool_state_row;
pub mod msol_ticket_sol_spent_row;
pub mod protocol_admin_state_row;
pub mod protocol_config_row;
pub mod protocol_owner_state_row;
pub mod user_lp_position_row;
pub use self::{
liquidity_pool_state_row::*, msol_ticket_sol_spent_row::*, protocol_admin_state_row::*,
protocol_config_row::*, protocol_owner_state_row::*, user_lp_position_row::*,
};
use super::HeavenAccount;
pub struct HeavenAccountsMigration;
impl sqlx_migrator::Migration<sqlx::Postgres> for HeavenAccountsMigration {
fn app(&self) -> &str {
"heaven"
}
fn name(&self) -> &str {
"heaven_accounts"
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
vec![
Box::new(LiquidityPoolStateMigrationOperation),
Box::new(MsolTicketSolSpentMigrationOperation),
Box::new(ProtocolAdminStateMigrationOperation),
Box::new(ProtocolConfigMigrationOperation),
Box::new(ProtocolOwnerStateMigrationOperation),
Box::new(UserLpPositionMigrationOperation),
]
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
vec![]
}
}
pub struct HeavenAccountWithMetadata(pub HeavenAccount, pub carbon_core::account::AccountMetadata);
impl From<(HeavenAccount, carbon_core::account::AccountMetadata)> for HeavenAccountWithMetadata {
fn from(value: (HeavenAccount, carbon_core::account::AccountMetadata)) -> Self {
HeavenAccountWithMetadata(value.0, value.1)
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for HeavenAccountWithMetadata {
async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let HeavenAccountWithMetadata(account, metadata) = self;
match account {
HeavenAccount::LiquidityPoolState(account) => {
let row = liquidity_pool_state_row::LiquidityPoolStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
HeavenAccount::MsolTicketSolSpent(account) => {
let row = msol_ticket_sol_spent_row::MsolTicketSolSpentRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolAdminState(account) => {
let row = protocol_admin_state_row::ProtocolAdminStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolConfig(account) => {
let row = protocol_config_row::ProtocolConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolOwnerState(account) => {
let row = protocol_owner_state_row::ProtocolOwnerStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
HeavenAccount::UserLpPosition(account) => {
let row = user_lp_position_row::UserLpPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
}
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for HeavenAccountWithMetadata {
async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let HeavenAccountWithMetadata(account, metadata) = self;
match account {
HeavenAccount::LiquidityPoolState(account) => {
let row = liquidity_pool_state_row::LiquidityPoolStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
HeavenAccount::MsolTicketSolSpent(account) => {
let row = msol_ticket_sol_spent_row::MsolTicketSolSpentRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolAdminState(account) => {
let row = protocol_admin_state_row::ProtocolAdminStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolConfig(account) => {
let row = protocol_config_row::ProtocolConfigRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
HeavenAccount::ProtocolOwnerState(account) => {
let row = protocol_owner_state_row::ProtocolOwnerStateRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
HeavenAccount::UserLpPosition(account) => {
let row = user_lp_position_row::UserLpPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
}
}
}