pub mod buy_row;
pub mod config_init_row;
pub mod config_update_row;
pub mod cpi_event_row;
pub mod migrate_funds_row;
pub mod sell_row;
pub mod token_mint_row;
pub use self::{
buy_row::*, config_init_row::*, config_update_row::*, cpi_event_row::*, migrate_funds_row::*,
sell_row::*, token_mint_row::*,
};
use super::MoonshotInstruction;
pub struct MoonshotInstructionsMigration;
impl sqlx_migrator::Migration<sqlx::Postgres> for MoonshotInstructionsMigration {
fn app(&self) -> &str {
"moonshot"
}
fn name(&self) -> &str {
"moonshot_instructions"
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
vec![
Box::new(BuyMigrationOperation),
Box::new(ConfigInitMigrationOperation),
Box::new(ConfigUpdateMigrationOperation),
Box::new(MigrateFundsMigrationOperation),
Box::new(SellMigrationOperation),
Box::new(TokenMintMigrationOperation),
Box::new(CpiEventMigrationOperation),
]
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
vec![]
}
}
pub struct MoonshotInstructionWithMetadata(
pub MoonshotInstruction,
pub carbon_core::instruction::InstructionMetadata,
pub Vec<solana_instruction::AccountMeta>,
);
impl
From<(
MoonshotInstruction,
carbon_core::instruction::InstructionMetadata,
Vec<solana_instruction::AccountMeta>,
)> for MoonshotInstructionWithMetadata
{
fn from(
value: (
MoonshotInstruction,
carbon_core::instruction::InstructionMetadata,
Vec<solana_instruction::AccountMeta>,
),
) -> Self {
MoonshotInstructionWithMetadata(value.0, value.1, value.2)
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for MoonshotInstructionWithMetadata {
async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let MoonshotInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
match decoded_instruction {
MoonshotInstruction::TokenMint { data, .. } => {
let row = token_mint_row::TokenMintRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::Buy { data, .. } => {
let row = buy_row::BuyRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::Sell { data, .. } => {
let row = sell_row::SellRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::MigrateFunds { data, .. } => {
let row = migrate_funds_row::MigrateFundsRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::ConfigInit { data, .. } => {
let row = config_init_row::ConfigInitRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::ConfigUpdate { data, .. } => {
let row = config_update_row::ConfigUpdateRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
MoonshotInstruction::CpiEvent { data, .. } => {
let row = cpi_event_row::CpiEventRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.insert(pool).await?;
Ok(())
}
}
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for MoonshotInstructionWithMetadata {
async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let MoonshotInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
match decoded_instruction {
MoonshotInstruction::TokenMint { data, .. } => {
let row = token_mint_row::TokenMintRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::Buy { data, .. } => {
let row = buy_row::BuyRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::Sell { data, .. } => {
let row = sell_row::SellRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::MigrateFunds { data, .. } => {
let row = migrate_funds_row::MigrateFundsRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::ConfigInit { data, .. } => {
let row = config_init_row::ConfigInitRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::ConfigUpdate { data, .. } => {
let row = config_update_row::ConfigUpdateRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
MoonshotInstruction::CpiEvent { data, .. } => {
let row = cpi_event_row::CpiEventRow::from_parts(
data.clone(),
metadata.clone(),
raw_accounts.clone(),
);
row.upsert(pool).await?;
Ok(())
}
}
}
}