carbon-sharky-decoder 2.0.0

Sharky Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
pub mod escrow_p_d_a_row;
pub mod loan_row;
pub mod n_f_t_list_row;
pub mod order_book_row;
pub mod price_update_v2_row;
pub mod program_version_row;
pub mod token_lending_loan_row;
pub mod token_lending_order_book_row;
pub mod token_lending_pool_row;

pub use self::{
    escrow_p_d_a_row::*, loan_row::*, n_f_t_list_row::*, order_book_row::*, price_update_v2_row::*,
    program_version_row::*, token_lending_loan_row::*, token_lending_order_book_row::*,
    token_lending_pool_row::*,
};
use super::SharkyAccount;

pub struct SharkyAccountsMigration;

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

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

    fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
        vec![
            Box::new(EscrowPDAMigrationOperation),
            Box::new(LoanMigrationOperation),
            Box::new(NFTListMigrationOperation),
            Box::new(OrderBookMigrationOperation),
            Box::new(PriceUpdateV2MigrationOperation),
            Box::new(ProgramVersionMigrationOperation),
            Box::new(TokenLendingLoanMigrationOperation),
            Box::new(TokenLendingOrderBookMigrationOperation),
            Box::new(TokenLendingPoolMigrationOperation),
        ]
    }

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

pub struct SharkyAccountWithMetadata(pub SharkyAccount, pub carbon_core::account::AccountMetadata);

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

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

        match account {
            SharkyAccount::EscrowPDA(account) => {
                let row =
                    escrow_p_d_a_row::EscrowPDARow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::Loan(account) => {
                let row = loan_row::LoanRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::NFTList(account) => {
                let row =
                    n_f_t_list_row::NFTListRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::OrderBook(account) => {
                let row =
                    order_book_row::OrderBookRow::from_parts(*account.clone(), metadata.clone());
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::PriceUpdateV2(account) => {
                let row = price_update_v2_row::PriceUpdateV2Row::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::ProgramVersion(account) => {
                let row = program_version_row::ProgramVersionRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingLoan(account) => {
                let row = token_lending_loan_row::TokenLendingLoanRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingOrderBook(account) => {
                let row = token_lending_order_book_row::TokenLendingOrderBookRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingPool(account) => {
                let row = token_lending_pool_row::TokenLendingPoolRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
        }
    }
}

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for SharkyAccountWithMetadata {
    async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let SharkyAccountWithMetadata(account, metadata) = self;
        match account {
            SharkyAccount::EscrowPDA(account) => {
                let row =
                    escrow_p_d_a_row::EscrowPDARow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::Loan(account) => {
                let row = loan_row::LoanRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::NFTList(account) => {
                let row =
                    n_f_t_list_row::NFTListRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::OrderBook(account) => {
                let row =
                    order_book_row::OrderBookRow::from_parts(*account.clone(), metadata.clone());
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::PriceUpdateV2(account) => {
                let row = price_update_v2_row::PriceUpdateV2Row::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::ProgramVersion(account) => {
                let row = program_version_row::ProgramVersionRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingLoan(account) => {
                let row = token_lending_loan_row::TokenLendingLoanRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingOrderBook(account) => {
                let row = token_lending_order_book_row::TokenLendingOrderBookRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            SharkyAccount::TokenLendingPool(account) => {
                let row = token_lending_pool_row::TokenLendingPoolRow::from_parts(
                    *account.clone(),
                    metadata.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
        }
    }
}