carbon-marginfi-v2-decoder 1.0.0

MarginfiV2 Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
pub mod bank_metadata_row;
pub mod bank_row;
pub mod execute_order_record_row;
pub mod fee_state_row;
pub mod lending_row;
pub mod liquidation_record_row;
pub mod marginfi_account_row;
pub mod marginfi_group_row;
pub mod minimal_obligation_row;
pub mod minimal_reserve_row;
pub mod minimal_spot_market_row;
pub mod minimal_user_row;
pub mod order_row;
pub mod solend_minimal_reserve_row;
pub mod staked_settings_row;

pub use self::{
    bank_metadata_row::*, bank_row::*, execute_order_record_row::*, fee_state_row::*,
    lending_row::*, liquidation_record_row::*, marginfi_account_row::*, marginfi_group_row::*,
    minimal_obligation_row::*, minimal_reserve_row::*, minimal_spot_market_row::*,
    minimal_user_row::*, order_row::*, solend_minimal_reserve_row::*, staked_settings_row::*,
};
use super::MarginfiV2Account;

pub struct MarginfiV2AccountsMigration;

impl sqlx_migrator::Migration<sqlx::Postgres> for MarginfiV2AccountsMigration {
    fn app(&self) -> &str {
        "marginfi-v2"
    }

    fn name(&self) -> &str {
        "marginfi_v2_accounts"
    }

    fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
        vec![
            Box::new(BankMigrationOperation),
            Box::new(BankMetadataMigrationOperation),
            Box::new(ExecuteOrderRecordMigrationOperation),
            Box::new(FeeStateMigrationOperation),
            Box::new(LendingMigrationOperation),
            Box::new(LiquidationRecordMigrationOperation),
            Box::new(MarginfiAccountMigrationOperation),
            Box::new(MarginfiGroupMigrationOperation),
            Box::new(MinimalObligationMigrationOperation),
            Box::new(MinimalReserveMigrationOperation),
            Box::new(MinimalSpotMarketMigrationOperation),
            Box::new(MinimalUserMigrationOperation),
            Box::new(OrderMigrationOperation),
            Box::new(SolendMinimalReserveMigrationOperation),
            Box::new(StakedSettingsMigrationOperation),
        ]
    }

    fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
        vec![]
    }
}

pub struct MarginfiV2AccountWithMetadata(
    pub MarginfiV2Account,
    pub carbon_core::account::AccountMetadata,
);

impl From<(MarginfiV2Account, carbon_core::account::AccountMetadata)>
    for MarginfiV2AccountWithMetadata
{
    fn from(value: (MarginfiV2Account, carbon_core::account::AccountMetadata)) -> Self {
        MarginfiV2AccountWithMetadata(value.0, value.1)
    }
}

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for MarginfiV2AccountWithMetadata {
    async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let MarginfiV2AccountWithMetadata(account, metadata) = self;

        match account {
            MarginfiV2Account::Bank(account) => {
                let row = bank_row::BankRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::BankMetadata(account) => {
                let row = bank_metadata_row::BankMetadataRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::ExecuteOrderRecord(account) => {
                let row = execute_order_record_row::ExecuteOrderRecordRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::FeeState(account) => {
                let row =
                    fee_state_row::FeeStateRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::Lending(account) => {
                let row = lending_row::LendingRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::LiquidationRecord(account) => {
                let row = liquidation_record_row::LiquidationRecordRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MarginfiAccount(account) => {
                let row = marginfi_account_row::MarginfiAccountRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MarginfiGroup(account) => {
                let row = marginfi_group_row::MarginfiGroupRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalObligation(account) => {
                let row = minimal_obligation_row::MinimalObligationRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalReserve(account) => {
                let row = minimal_reserve_row::MinimalReserveRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalSpotMarket(account) => {
                let row = minimal_spot_market_row::MinimalSpotMarketRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalUser(account) => {
                let row = minimal_user_row::MinimalUserRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::Order(account) => {
                let row = order_row::OrderRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::SolendMinimalReserve(account) => {
                let row = solend_minimal_reserve_row::SolendMinimalReserveRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::StakedSettings(account) => {
                let row = staked_settings_row::StakedSettingsRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
        }
    }
}

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for MarginfiV2AccountWithMetadata {
    async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let MarginfiV2AccountWithMetadata(account, metadata) = self;
        match account {
            MarginfiV2Account::Bank(account) => {
                let row = bank_row::BankRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::BankMetadata(account) => {
                let row = bank_metadata_row::BankMetadataRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::ExecuteOrderRecord(account) => {
                let row = execute_order_record_row::ExecuteOrderRecordRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::FeeState(account) => {
                let row =
                    fee_state_row::FeeStateRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::Lending(account) => {
                let row = lending_row::LendingRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::LiquidationRecord(account) => {
                let row = liquidation_record_row::LiquidationRecordRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MarginfiAccount(account) => {
                let row = marginfi_account_row::MarginfiAccountRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MarginfiGroup(account) => {
                let row = marginfi_group_row::MarginfiGroupRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalObligation(account) => {
                let row = minimal_obligation_row::MinimalObligationRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalReserve(account) => {
                let row = minimal_reserve_row::MinimalReserveRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalSpotMarket(account) => {
                let row = minimal_spot_market_row::MinimalSpotMarketRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::MinimalUser(account) => {
                let row = minimal_user_row::MinimalUserRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::Order(account) => {
                let row = order_row::OrderRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::SolendMinimalReserve(account) => {
                let row = solend_minimal_reserve_row::SolendMinimalReserveRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            MarginfiV2Account::StakedSettings(account) => {
                let row = staked_settings_row::StakedSettingsRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
        }
    }
}