pub mod authorization_list_row;
pub mod liquidity_row;
pub mod rate_model_row;
pub mod token_reserve_row;
pub mod user_borrow_position_row;
pub mod user_claim_row;
pub mod user_supply_position_row;
pub use self::{
authorization_list_row::*, liquidity_row::*, rate_model_row::*, token_reserve_row::*,
user_borrow_position_row::*, user_claim_row::*, user_supply_position_row::*,
};
use super::JupiterLendAccount;
pub struct JupiterLendAccountsMigration;
impl sqlx_migrator::Migration<sqlx::Postgres> for JupiterLendAccountsMigration {
fn app(&self) -> &str {
"jupiter-lend"
}
fn name(&self) -> &str {
"jupiter_lend_accounts"
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
vec![
Box::new(AuthorizationListMigrationOperation),
Box::new(LiquidityMigrationOperation),
Box::new(RateModelMigrationOperation),
Box::new(TokenReserveMigrationOperation),
Box::new(UserBorrowPositionMigrationOperation),
Box::new(UserClaimMigrationOperation),
Box::new(UserSupplyPositionMigrationOperation),
]
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
vec![]
}
}
pub struct JupiterLendAccountWithMetadata(
pub JupiterLendAccount,
pub carbon_core::account::AccountMetadata,
);
impl From<(JupiterLendAccount, carbon_core::account::AccountMetadata)>
for JupiterLendAccountWithMetadata
{
fn from(value: (JupiterLendAccount, carbon_core::account::AccountMetadata)) -> Self {
JupiterLendAccountWithMetadata(value.0, value.1)
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for JupiterLendAccountWithMetadata {
async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let JupiterLendAccountWithMetadata(account, metadata) = self;
match account {
JupiterLendAccount::AuthorizationList(account) => {
let row = authorization_list_row::AuthorizationListRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::Liquidity(account) => {
let row =
liquidity_row::LiquidityRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::RateModel(account) => {
let row =
rate_model_row::RateModelRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::TokenReserve(account) => {
let row = token_reserve_row::TokenReserveRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::UserBorrowPosition(account) => {
let row = user_borrow_position_row::UserBorrowPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::UserClaim(account) => {
let row =
user_claim_row::UserClaimRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
JupiterLendAccount::UserSupplyPosition(account) => {
let row = user_supply_position_row::UserSupplyPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.insert(pool).await?;
Ok(())
}
}
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for JupiterLendAccountWithMetadata {
async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let JupiterLendAccountWithMetadata(account, metadata) = self;
match account {
JupiterLendAccount::AuthorizationList(account) => {
let row = authorization_list_row::AuthorizationListRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::Liquidity(account) => {
let row =
liquidity_row::LiquidityRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::RateModel(account) => {
let row =
rate_model_row::RateModelRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::TokenReserve(account) => {
let row = token_reserve_row::TokenReserveRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::UserBorrowPosition(account) => {
let row = user_borrow_position_row::UserBorrowPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::UserClaim(account) => {
let row =
user_claim_row::UserClaimRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
JupiterLendAccount::UserSupplyPosition(account) => {
let row = user_supply_position_row::UserSupplyPositionRow::from_parts(
*account.clone(),
metadata.clone(),
);
row.upsert(pool).await?;
Ok(())
}
}
}
}