use async_graphql::{Request, Response};
use linera_base::{
abi::{ContractAbi, ServiceAbi},
data_types::Amount,
identifiers::{AccountOwner, ApplicationId, ChainId},
};
use linera_sdk_derive::GraphQLMutationRootInCrate;
use serde::{Deserialize, Serialize};
pub use super::fungible::{Account, FungibleResponse, InitialState, InitialStateBuilder};
#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
pub struct WrappedParameters {
pub ticker_symbol: String,
pub minter: Option<AccountOwner>,
pub mint_chain_id: Option<ChainId>,
pub evm_token_address: [u8; 20],
pub evm_source_chain_id: u64,
pub bridge_app_id: Option<ApplicationId>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct BurnEvent {
pub target: [u8; 20],
pub amount: Amount,
}
#[derive(Debug, Deserialize, Serialize, GraphQLMutationRootInCrate)]
pub enum WrappedFungibleOperation {
Balance {
owner: AccountOwner,
},
TickerSymbol,
Approve {
owner: AccountOwner,
spender: AccountOwner,
allowance: Amount,
},
Transfer {
owner: AccountOwner,
amount: Amount,
target_account: Account,
},
TransferFrom {
owner: AccountOwner,
spender: AccountOwner,
amount: Amount,
target_account: Account,
},
Claim {
source_account: Account,
amount: Amount,
target_account: Account,
},
Mint {
target_account: Account,
amount: Amount,
},
Burn {
owner: AccountOwner,
amount: Amount,
},
}
pub struct WrappedFungibleTokenAbi;
impl ContractAbi for WrappedFungibleTokenAbi {
type Operation = WrappedFungibleOperation;
type Response = FungibleResponse;
}
impl ServiceAbi for WrappedFungibleTokenAbi {
type Query = Request;
type QueryResponse = Response;
}