pub mod dca_row;
pub use self::dca_row::*;
use super::JupiterDcaAccount;
pub struct JupiterDcaAccountsMigration;
impl sqlx_migrator::Migration<sqlx::Postgres> for JupiterDcaAccountsMigration {
fn app(&self) -> &str {
"jupiter-dca"
}
fn name(&self) -> &str {
"jupiter_dca_accounts"
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
vec![Box::new(DcaMigrationOperation)]
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
vec![]
}
}
pub struct JupiterDcaAccountWithMetadata(
pub JupiterDcaAccount,
pub carbon_core::account::AccountMetadata,
);
impl From<(JupiterDcaAccount, carbon_core::account::AccountMetadata)>
for JupiterDcaAccountWithMetadata
{
fn from(value: (JupiterDcaAccount, carbon_core::account::AccountMetadata)) -> Self {
JupiterDcaAccountWithMetadata(value.0, value.1)
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for JupiterDcaAccountWithMetadata {
async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let JupiterDcaAccountWithMetadata(account, metadata) = self;
match account {
JupiterDcaAccount::Dca(account) => {
let row = dca_row::DcaRow::from_parts(*account.clone(), metadata.clone());
row.insert(pool).await?;
Ok(())
}
}
}
}
#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for JupiterDcaAccountWithMetadata {
async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
let JupiterDcaAccountWithMetadata(account, metadata) = self;
match account {
JupiterDcaAccount::Dca(account) => {
let row = dca_row::DcaRow::from_parts(*account.clone(), metadata.clone());
row.upsert(pool).await?;
Ok(())
}
}
}
}