use alloc::collections::{BTreeMap, BTreeSet};
use serde::{Deserialize, Serialize};
use crate::{
client::api::transaction_builder::{transition::Transitions, Burn},
types::block::{
address::Address,
output::{AccountId, OutputId},
payload::tagged_data::TaggedDataPayload,
},
};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct TransactionOptions {
pub remainder_value_strategy: RemainderValueStrategy,
pub tagged_data_payload: Option<TaggedDataPayload>,
pub required_inputs: BTreeSet<OutputId>,
pub transitions: Option<Transitions>,
pub burn: Option<Burn>,
pub note: Option<String>,
pub allow_micro_amount: bool,
pub allow_additional_input_selection: bool,
pub mana_allotments: BTreeMap<AccountId, u64>,
pub issuer_id: Option<AccountId>,
}
impl Default for TransactionOptions {
fn default() -> Self {
Self {
remainder_value_strategy: Default::default(),
tagged_data_payload: Default::default(),
required_inputs: Default::default(),
transitions: Default::default(),
burn: Default::default(),
note: Default::default(),
allow_micro_amount: false,
allow_additional_input_selection: true,
mana_allotments: Default::default(),
issuer_id: Default::default(),
}
}
}
#[allow(clippy::enum_variant_names)]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "strategy", content = "value")]
pub enum RemainderValueStrategy {
ReuseAddress,
CustomAddress(Address),
}
impl Default for RemainderValueStrategy {
fn default() -> Self {
Self::ReuseAddress
}
}