use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SyncOptions {
#[serde(default = "no")]
pub force_syncing: bool,
#[serde(default = "no")]
pub sync_incoming_transactions: bool,
#[serde(default = "yes")]
pub sync_pending_transactions: bool,
#[serde(default)]
pub wallet: WalletSyncOptions,
#[serde(default)]
pub account: AccountSyncOptions,
#[serde(default)]
pub nft: NftSyncOptions,
#[serde(default = "no")]
pub sync_only_most_basic_outputs: bool,
#[serde(default = "no")]
pub sync_native_token_foundries: bool,
#[serde(default = "no")]
pub sync_implicit_accounts: bool,
}
impl Default for SyncOptions {
fn default() -> Self {
Self {
force_syncing: no(),
sync_incoming_transactions: no(),
sync_pending_transactions: yes(),
wallet: WalletSyncOptions::default(),
account: AccountSyncOptions::default(),
nft: NftSyncOptions::default(),
sync_only_most_basic_outputs: no(),
sync_native_token_foundries: no(),
sync_implicit_accounts: no(),
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct WalletSyncOptions {
#[serde(default = "yes")]
pub basic_outputs: bool,
#[serde(default = "yes")]
pub account_outputs: bool,
#[serde(default = "yes")]
pub nft_outputs: bool,
#[serde(default = "yes")]
pub delegation_outputs: bool,
}
impl Default for WalletSyncOptions {
fn default() -> Self {
Self {
basic_outputs: yes(),
account_outputs: yes(),
nft_outputs: yes(),
delegation_outputs: yes(),
}
}
}
impl WalletSyncOptions {
pub(crate) fn all_outputs(&self) -> bool {
self.basic_outputs && self.account_outputs && self.nft_outputs && self.delegation_outputs
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct AccountSyncOptions {
#[serde(default = "no")]
pub basic_outputs: bool,
#[serde(default = "no")]
pub account_outputs: bool,
#[serde(default = "yes")]
pub foundry_outputs: bool,
#[serde(default = "no")]
pub nft_outputs: bool,
#[serde(default = "no")]
pub delegation_outputs: bool,
}
impl Default for AccountSyncOptions {
fn default() -> Self {
Self {
basic_outputs: no(),
account_outputs: no(),
foundry_outputs: yes(),
nft_outputs: no(),
delegation_outputs: no(),
}
}
}
impl AccountSyncOptions {
pub(crate) fn all_outputs(&self) -> bool {
self.basic_outputs
&& self.account_outputs
&& self.foundry_outputs
&& self.nft_outputs
&& self.delegation_outputs
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct NftSyncOptions {
#[serde(default = "no")]
pub basic_outputs: bool,
#[serde(default = "no")]
pub account_outputs: bool,
#[serde(default = "no")]
pub nft_outputs: bool,
#[serde(default = "no")]
pub delegation_outputs: bool,
}
impl Default for NftSyncOptions {
fn default() -> Self {
Self {
basic_outputs: no(),
account_outputs: no(),
nft_outputs: no(),
delegation_outputs: no(),
}
}
}
impl NftSyncOptions {
pub(crate) fn all_outputs(&self) -> bool {
self.basic_outputs && self.account_outputs && self.nft_outputs && self.delegation_outputs
}
}
const fn yes() -> bool {
true
}
const fn no() -> bool {
false
}