use {
crate::types::graphql::GraduationMethodDataGraphQL,
carbon_core::graphql::primitives::{Pubkey, I64, U128, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "BondingCurve")]
pub struct BondingCurveGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub creator: Pubkey,
pub retain_mint_authority: bool,
pub buy_requires_permission: bool,
pub buy_permission_bitmap: Vec<U8>,
pub sell_requires_permission: bool,
pub sell_permission_bitmap: Vec<U8>,
pub quote_fee_bps: i32,
pub base_fee_bps: i32,
pub control_points: Vec<i32>,
pub start_price: U128,
pub end_price: U128,
pub quote_amount: U64,
pub base_amount: U64,
pub launch_time: I64,
pub creator_reward: U64,
pub graduation_target: U64,
pub graduation_time: I64,
pub graduation_reward: U64,
pub max_buy_amount: U64,
pub max_sell_amount: U64,
pub swap_fee_bps: i32,
pub base_allocation_bps: i32,
pub graduation_methods: Vec<GraduationMethodDataGraphQL>,
pub min_reserve_bps: i32,
pub padding1: Vec<U8>,
pub preminted_supply: U64,
pub padding2: Vec<U8>,
}
impl TryFrom<crate::accounts::postgres::BondingCurveRow> for BondingCurveGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::BondingCurveRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
base_mint: carbon_core::graphql::primitives::Pubkey(row.base_mint.0),
quote_mint: carbon_core::graphql::primitives::Pubkey(row.quote_mint.0),
creator: carbon_core::graphql::primitives::Pubkey(row.creator.0),
retain_mint_authority: row.retain_mint_authority,
buy_requires_permission: row.buy_requires_permission,
buy_permission_bitmap: row
.buy_permission_bitmap
.into_iter()
.map(|x| carbon_core::graphql::primitives::U8((*x) as u8))
.collect(),
sell_requires_permission: row.sell_requires_permission,
sell_permission_bitmap: row
.sell_permission_bitmap
.into_iter()
.map(|x| carbon_core::graphql::primitives::U8((*x) as u8))
.collect(),
quote_fee_bps: *row.quote_fee_bps,
base_fee_bps: *row.base_fee_bps,
control_points: row.control_points.into_iter().map(|item| *item).collect(),
start_price: carbon_core::graphql::primitives::U128(*row.start_price),
end_price: carbon_core::graphql::primitives::U128(*row.end_price),
quote_amount: carbon_core::graphql::primitives::U64(*row.quote_amount),
base_amount: carbon_core::graphql::primitives::U64(*row.base_amount),
launch_time: carbon_core::graphql::primitives::I64(row.launch_time),
creator_reward: carbon_core::graphql::primitives::U64(*row.creator_reward),
graduation_target: carbon_core::graphql::primitives::U64(*row.graduation_target),
graduation_time: carbon_core::graphql::primitives::I64(row.graduation_time),
graduation_reward: carbon_core::graphql::primitives::U64(*row.graduation_reward),
max_buy_amount: carbon_core::graphql::primitives::U64(*row.max_buy_amount),
max_sell_amount: carbon_core::graphql::primitives::U64(*row.max_sell_amount),
swap_fee_bps: *row.swap_fee_bps,
base_allocation_bps: *row.base_allocation_bps,
graduation_methods: row
.graduation_methods
.0
.into_iter()
.map(|item| item.into())
.collect(),
min_reserve_bps: *row.min_reserve_bps,
padding1: row
.padding1
.into_iter()
.map(|x| carbon_core::graphql::primitives::U8((*x) as u8))
.collect(),
preminted_supply: carbon_core::graphql::primitives::U64(*row.preminted_supply),
padding2: row
.padding2
.into_iter()
.map(|x| carbon_core::graphql::primitives::U8((*x) as u8))
.collect(),
})
}
}