use serde::{Deserialize, Serialize};
use crate::types::block::address::Bech32Address;
const DEFAULT_ADDRESS_START_INDEX: u32 = 0;
const DEFAULT_FORCE_SYNCING: bool = false;
const DEFAULT_SYNC_INCOMING_TRANSACTIONS: bool = false;
const DEFAULT_SYNC_ONLY_MOST_BASIC_OUTPUTS: bool = false;
const DEFAULT_SYNC_PENDING_TRANSACTIONS: bool = true;
const DEFAULT_SYNC_NATIVE_TOKEN_FOUNDRIES: bool = false;
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SyncOptions {
#[serde(default)]
pub addresses: Vec<Bech32Address>,
#[serde(default = "default_address_start_index")]
pub address_start_index: u32,
#[serde(default = "default_address_start_index")]
pub address_start_index_internal: u32,
#[serde(default)]
pub force_syncing: bool,
#[serde(default = "default_sync_incoming_transactions")]
pub sync_incoming_transactions: bool,
#[serde(default = "default_sync_pending_transactions")]
pub sync_pending_transactions: bool,
#[serde(default)]
pub account: AccountSyncOptions,
#[serde(default)]
pub alias: AliasSyncOptions,
#[serde(default)]
pub nft: NftSyncOptions,
#[serde(default = "default_sync_only_most_basic_outputs")]
pub sync_only_most_basic_outputs: bool,
#[serde(default = "default_sync_native_token_foundries")]
pub sync_native_token_foundries: bool,
}
fn default_address_start_index() -> u32 {
DEFAULT_ADDRESS_START_INDEX
}
fn default_force_syncing() -> bool {
DEFAULT_FORCE_SYNCING
}
fn default_sync_incoming_transactions() -> bool {
DEFAULT_SYNC_INCOMING_TRANSACTIONS
}
fn default_sync_only_most_basic_outputs() -> bool {
DEFAULT_SYNC_ONLY_MOST_BASIC_OUTPUTS
}
fn default_sync_pending_transactions() -> bool {
DEFAULT_SYNC_PENDING_TRANSACTIONS
}
fn default_sync_native_token_foundries() -> bool {
DEFAULT_SYNC_NATIVE_TOKEN_FOUNDRIES
}
impl Default for SyncOptions {
fn default() -> Self {
Self {
addresses: Vec::new(),
address_start_index: default_address_start_index(),
address_start_index_internal: default_address_start_index(),
sync_incoming_transactions: default_sync_incoming_transactions(),
sync_pending_transactions: default_sync_pending_transactions(),
account: AccountSyncOptions::default(),
alias: AliasSyncOptions::default(),
nft: NftSyncOptions::default(),
sync_only_most_basic_outputs: default_sync_only_most_basic_outputs(),
sync_native_token_foundries: default_sync_native_token_foundries(),
force_syncing: default_force_syncing(),
}
}
}
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct AccountSyncOptions {
pub basic_outputs: bool,
pub nft_outputs: bool,
pub alias_outputs: bool,
}
impl Default for AccountSyncOptions {
fn default() -> Self {
Self {
basic_outputs: true,
nft_outputs: true,
alias_outputs: true,
}
}
}
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct AliasSyncOptions {
pub basic_outputs: bool,
pub nft_outputs: bool,
pub alias_outputs: bool,
pub foundry_outputs: bool,
}
impl Default for AliasSyncOptions {
fn default() -> Self {
Self {
basic_outputs: false,
nft_outputs: false,
alias_outputs: false,
foundry_outputs: true,
}
}
}
#[derive(Debug, Default, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct NftSyncOptions {
pub basic_outputs: bool,
pub nft_outputs: bool,
pub alias_outputs: bool,
}