use {
crate::types::graphql::{
BankCacheGraphQL, BankConfigGraphQL, BankRateLimiterGraphQL, EmodeSettingsGraphQL,
WrappedI80F48GraphQL,
},
carbon_core::graphql::primitives::{Pubkey, I64, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "Bank")]
pub struct BankGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub mint: Pubkey,
pub mint_decimals: U8,
pub group: Pubkey,
pub pad0: Vec<U8>,
pub asset_share_value: WrappedI80F48GraphQL,
pub liability_share_value: WrappedI80F48GraphQL,
pub liquidity_vault: Pubkey,
pub liquidity_vault_bump: U8,
pub liquidity_vault_authority_bump: U8,
pub insurance_vault: Pubkey,
pub insurance_vault_bump: U8,
pub insurance_vault_authority_bump: U8,
pub pad1: Vec<U8>,
pub collected_insurance_fees_outstanding: WrappedI80F48GraphQL,
pub fee_vault: Pubkey,
pub fee_vault_bump: U8,
pub fee_vault_authority_bump: U8,
pub pad2: Vec<U8>,
pub collected_group_fees_outstanding: WrappedI80F48GraphQL,
pub total_liability_shares: WrappedI80F48GraphQL,
pub total_asset_shares: WrappedI80F48GraphQL,
pub last_update: I64,
pub config: BankConfigGraphQL,
pub flags: U64,
pub emissions_rate: U64,
pub emissions_remaining: WrappedI80F48GraphQL,
pub emissions_mint: Pubkey,
pub collected_program_fees_outstanding: WrappedI80F48GraphQL,
pub emode: EmodeSettingsGraphQL,
pub fees_destination_account: Pubkey,
pub cache: BankCacheGraphQL,
pub lending_position_count: i32,
pub borrowing_position_count: i32,
pub padding0: Vec<U8>,
pub integration_acc1: Pubkey,
pub integration_acc2: Pubkey,
pub integration_acc3: Pubkey,
pub rate_limiter: BankRateLimiterGraphQL,
pub pad0_1: Vec<U8>,
pub padding1: Vec<Vec<U64>>,
}
impl TryFrom<crate::accounts::postgres::BankRow> for BankGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::BankRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
mint: carbon_core::graphql::primitives::Pubkey(row.mint.0),
mint_decimals: carbon_core::graphql::primitives::U8((*row.mint_decimals) as u8),
group: carbon_core::graphql::primitives::Pubkey(row.group.0),
pad0: row
.pad0
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
asset_share_value: row.asset_share_value.0.into(),
liability_share_value: row.liability_share_value.0.into(),
liquidity_vault: carbon_core::graphql::primitives::Pubkey(row.liquidity_vault.0),
liquidity_vault_bump: carbon_core::graphql::primitives::U8(
(*row.liquidity_vault_bump) as u8,
),
liquidity_vault_authority_bump: carbon_core::graphql::primitives::U8(
(*row.liquidity_vault_authority_bump) as u8,
),
insurance_vault: carbon_core::graphql::primitives::Pubkey(row.insurance_vault.0),
insurance_vault_bump: carbon_core::graphql::primitives::U8(
(*row.insurance_vault_bump) as u8,
),
insurance_vault_authority_bump: carbon_core::graphql::primitives::U8(
(*row.insurance_vault_authority_bump) as u8,
),
pad1: row
.pad1
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
collected_insurance_fees_outstanding: row.collected_insurance_fees_outstanding.0.into(),
fee_vault: carbon_core::graphql::primitives::Pubkey(row.fee_vault.0),
fee_vault_bump: carbon_core::graphql::primitives::U8((*row.fee_vault_bump) as u8),
fee_vault_authority_bump: carbon_core::graphql::primitives::U8(
(*row.fee_vault_authority_bump) as u8,
),
pad2: row
.pad2
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
collected_group_fees_outstanding: row.collected_group_fees_outstanding.0.into(),
total_liability_shares: row.total_liability_shares.0.into(),
total_asset_shares: row.total_asset_shares.0.into(),
last_update: carbon_core::graphql::primitives::I64(row.last_update),
config: row.config.0.into(),
flags: carbon_core::graphql::primitives::U64(*row.flags),
emissions_rate: carbon_core::graphql::primitives::U64(*row.emissions_rate),
emissions_remaining: row.emissions_remaining.0.into(),
emissions_mint: carbon_core::graphql::primitives::Pubkey(row.emissions_mint.0),
collected_program_fees_outstanding: row.collected_program_fees_outstanding.0.into(),
emode: row.emode.0.into(),
fees_destination_account: carbon_core::graphql::primitives::Pubkey(
row.fees_destination_account.0,
),
cache: row.cache.0.into(),
lending_position_count: row.lending_position_count,
borrowing_position_count: row.borrowing_position_count,
padding0: row
.padding0
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
integration_acc1: carbon_core::graphql::primitives::Pubkey(row.integration_acc1.0),
integration_acc2: carbon_core::graphql::primitives::Pubkey(row.integration_acc2.0),
integration_acc3: carbon_core::graphql::primitives::Pubkey(row.integration_acc3.0),
rate_limiter: row.rate_limiter.0.into(),
pad0_1: row
.pad0_1
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
padding1: row
.padding1
.0
.into_iter()
.map(|item| {
item.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect()
})
.collect(),
})
}
}