use cid::Cid;
use fvm_actor_utils::receiver::RecipientData;
use fvm_ipld_bitfield::BitField;
use fvm_ipld_encoding::tuple::*;
use fvm_ipld_encoding::RawBytes;
use fvm_shared::address::Address;
use fvm_shared::ActorID;
#[cfg(doc)]
use super::state::Cursor;
pub type TokenID = u64;
pub type TokenSet = BitField;
pub type ActorIDSet = BitField;
pub trait FRC53NFT {
fn name(&self) -> String;
fn symbol(&self) -> String;
fn metadata(&self, params: TokenID) -> Cid;
fn total_supply(&self) -> u64;
fn burn(&self, token_id: TokenID);
fn list_tokens(&self) -> Vec<TokenID>;
fn balance_of(&self, owner: Address) -> u64;
fn owner_of(&self, token_id: TokenID) -> ActorID;
fn transfer(&self, params: TransferParams);
fn transfer_from(&self, params: TransferFromParams);
fn approve(&self, params: ApproveParams);
fn set_approval_for_all(&self, params: ApproveForAllParams);
fn get_approved(&self, params: TokenID) -> ActorID;
fn is_approved_for_all(&self, params: IsApprovedForAllParams) -> bool;
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct MintReturn {
pub balance: u64,
pub supply: u64,
pub token_ids: Vec<TokenID>,
pub recipient_data: RawBytes,
}
#[derive(Clone, Debug)]
pub struct MintIntermediate {
pub to: ActorID,
pub token_ids: Vec<TokenID>,
pub recipient_data: RawBytes,
}
impl RecipientData for MintIntermediate {
fn set_recipient_data(&mut self, data: RawBytes) {
self.recipient_data = data;
}
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct TransferIntermediate {
pub token_ids: Vec<TokenID>,
pub from: ActorID,
pub to: ActorID,
pub recipient_data: RawBytes,
}
impl RecipientData for TransferIntermediate {
fn set_recipient_data(&mut self, data: RawBytes) {
self.recipient_data = data;
}
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct TransferParams {
pub to: Address,
pub token_ids: Vec<TokenID>,
pub operator_data: RawBytes,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct TransferReturn {
pub from_balance: u64,
pub to_balance: u64,
pub token_ids: Vec<TokenID>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct TransferFromParams {
pub from: Address,
pub to: Address,
pub token_ids: Vec<TokenID>,
pub operator_data: RawBytes,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct BurnFromParams {
pub from: Address,
pub token_ids: Vec<TokenID>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ApproveParams {
pub operator: Address,
pub token_ids: Vec<TokenID>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ApproveForAllParams {
pub operator: Address,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct IsApprovedForAllParams {
pub owner: Address,
pub operator: Address,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct RevokeParams {
pub operator: Address,
pub token_ids: Vec<TokenID>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct RevokeForAllParams {
pub operator: Address,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListTokensParams {
pub cursor: RawBytes,
pub limit: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListTokensReturn {
pub tokens: BitField,
pub next_cursor: Option<RawBytes>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListOwnedTokensParams {
pub owner: Address,
pub cursor: RawBytes,
pub limit: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListOwnedTokensReturn {
pub tokens: TokenSet,
pub next_cursor: Option<RawBytes>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListTokenOperatorsParams {
pub token_id: TokenID,
pub cursor: RawBytes,
pub limit: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListTokenOperatorsReturn {
pub operators: ActorIDSet,
pub next_cursor: Option<RawBytes>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListOperatorTokensParams {
pub operator: Address,
pub cursor: RawBytes,
pub limit: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListOperatorTokensReturn {
pub tokens: TokenSet,
pub next_cursor: Option<RawBytes>,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListAccountOperatorsParams {
pub owner: Address,
pub cursor: RawBytes,
pub limit: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
pub struct ListAccountOperatorsReturn {
pub operators: ActorIDSet,
pub next_cursor: Option<RawBytes>,
}