carbon-drift-v2-decoder 2.0.0

Drift v2 Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
use {
    crate::types::graphql::{
        MarginModeGraphQL, OrderGraphQL, PerpPositionGraphQL, SpotPositionGraphQL,
    },
    carbon_core::graphql::primitives::{Pubkey, I64, U32, U64, U8},
    juniper::GraphQLObject,
};

#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "User")]
pub struct UserGraphQL {
    pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
    pub authority: Pubkey,
    pub delegate: Pubkey,
    pub name: Vec<U8>,
    pub spot_positions: Vec<SpotPositionGraphQL>,
    pub perp_positions: Vec<PerpPositionGraphQL>,
    pub orders: Vec<OrderGraphQL>,
    pub last_add_perp_lp_shares_ts: I64,
    pub total_deposits: U64,
    pub total_withdraws: U64,
    pub total_social_loss: U64,
    pub settled_perp_pnl: I64,
    pub cumulative_spot_fees: I64,
    pub cumulative_perp_funding: I64,
    pub liquidation_margin_freed: U64,
    pub last_active_slot: U64,
    pub next_order_id: U32,
    pub max_margin_ratio: U32,
    pub next_liquidation_id: i32,
    pub sub_account_id: i32,
    pub status: U8,
    pub is_margin_trading_enabled: bool,
    pub idle: bool,
    pub open_orders: U8,
    pub has_open_order: bool,
    pub open_auctions: U8,
    pub has_open_auction: bool,
    pub margin_mode: MarginModeGraphQL,
    pub pool_id: U8,
    pub padding1: Vec<U8>,
    pub last_fuel_bonus_update_ts: U32,
    pub padding: Vec<U8>,
}

impl TryFrom<crate::accounts::postgres::UserRow> for UserGraphQL {
    type Error = carbon_core::error::Error;
    fn try_from(row: crate::accounts::postgres::UserRow) -> Result<Self, Self::Error> {
        Ok(Self {
            account_metadata: row.account_metadata.into(),
            authority: carbon_core::graphql::primitives::Pubkey(row.authority.0),
            delegate: carbon_core::graphql::primitives::Pubkey(row.delegate.0),
            name: row
                .name
                .into_iter()
                .map(carbon_core::graphql::primitives::U8)
                .collect(),
            spot_positions: row
                .spot_positions
                .0
                .into_iter()
                .map(|item| item.into())
                .collect(),
            perp_positions: row
                .perp_positions
                .0
                .into_iter()
                .map(|item| item.into())
                .collect(),
            orders: row.orders.0.into_iter().map(|item| item.into()).collect(),
            last_add_perp_lp_shares_ts: carbon_core::graphql::primitives::I64(
                row.last_add_perp_lp_shares_ts,
            ),
            total_deposits: carbon_core::graphql::primitives::U64(*row.total_deposits),
            total_withdraws: carbon_core::graphql::primitives::U64(*row.total_withdraws),
            total_social_loss: carbon_core::graphql::primitives::U64(*row.total_social_loss),
            settled_perp_pnl: carbon_core::graphql::primitives::I64(row.settled_perp_pnl),
            cumulative_spot_fees: carbon_core::graphql::primitives::I64(row.cumulative_spot_fees),
            cumulative_perp_funding: carbon_core::graphql::primitives::I64(
                row.cumulative_perp_funding,
            ),
            liquidation_margin_freed: carbon_core::graphql::primitives::U64(
                *row.liquidation_margin_freed,
            ),
            last_active_slot: carbon_core::graphql::primitives::U64(*row.last_active_slot),
            next_order_id: carbon_core::graphql::primitives::U32((*row.next_order_id) as u32),
            max_margin_ratio: carbon_core::graphql::primitives::U32((*row.max_margin_ratio) as u32),
            next_liquidation_id: *row.next_liquidation_id,
            sub_account_id: *row.sub_account_id,
            status: carbon_core::graphql::primitives::U8((*row.status) as u8),
            is_margin_trading_enabled: row.is_margin_trading_enabled,
            idle: row.idle,
            open_orders: carbon_core::graphql::primitives::U8((*row.open_orders) as u8),
            has_open_order: row.has_open_order,
            open_auctions: carbon_core::graphql::primitives::U8((*row.open_auctions) as u8),
            has_open_auction: row.has_open_auction,
            margin_mode: row.margin_mode.0.into(),
            pool_id: carbon_core::graphql::primitives::U8((*row.pool_id) as u8),
            padding1: row
                .padding1
                .into_iter()
                .map(carbon_core::graphql::primitives::U8)
                .collect(),
            last_fuel_bonus_update_ts: carbon_core::graphql::primitives::U32(
                (*row.last_fuel_bonus_update_ts) as u32,
            ),
            padding: row
                .padding
                .into_iter()
                .map(carbon_core::graphql::primitives::U8)
                .collect(),
        })
    }
}