use {
crate::types::graphql::{KeyGraphQL, TokenDelegateRoleGraphQL, TokenStateGraphQL},
carbon_core::graphql::primitives::{Pubkey, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "TokenRecord")]
pub struct TokenRecordGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub key: KeyGraphQL,
pub bump: U8,
pub state: TokenStateGraphQL,
pub rule_set_revision: Option<U64>,
pub delegate: Option<Pubkey>,
pub delegate_role: Option<TokenDelegateRoleGraphQL>,
pub locked_transfer: Option<Pubkey>,
}
impl TryFrom<crate::accounts::postgres::TokenRecordRow> for TokenRecordGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::TokenRecordRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
key: row.key.0.into(),
bump: carbon_core::graphql::primitives::U8((*row.bump) as u8),
state: row.state.0.into(),
rule_set_revision: row
.rule_set_revision
.map(|v| carbon_core::graphql::primitives::U64(*v)),
delegate: row
.delegate
.map(|v| carbon_core::graphql::primitives::Pubkey(v.0)),
delegate_role: row.delegate_role.map(|v| v.0.into()),
locked_transfer: row
.locked_transfer
.map(|v| carbon_core::graphql::primitives::Pubkey(v.0)),
})
}
}