pub struct Form8949Row {Show 13 fields
pub part: Form8949Part,
pub box_: Form8949Box,
pub box_needs_review: bool,
pub description: String,
pub date_acquired: TaxDate,
pub date_sold: TaxDate,
pub proceeds: Usd,
pub cost_basis: Usd,
pub adjustment_code: String,
pub adjustment_amount: Usd,
pub gain: Usd,
pub wallet: WalletId,
pub disposition_kind: DisposeKind,
}Expand description
One Form 8949 row = one DisposalLeg disposed in the tax year. A pure projection of the leg;
no gain/basis/term math is performed here (all of it is already on the leg from the fold).
Fields§
§part: Form8949PartPart I (ST) or Part II (LT), from leg.term.
box_: Form8949BoxThe conservative “not reported to the IRS” box, chosen year-aware by form_8949:
pre-TY2025 the securities boxes C (ST) / F (LT); from TY2025 the digital-asset boxes I (ST) /
L (LT) — the securities boxes are forbidden for digital assets on the 2025 revision (D4).
box_needs_review: booltrue iff the disposing wallet is an Exchange (matches!(leg.wallet, Exchange { .. }))
— such a disposition MAY have been reported to the IRS by the broker (1099-DA from TY2025;
1099-B before), so the conservative default should be reviewed and reclassified: pre-TY2025
to A/B (ST) or D/E (LT) if a 1099-B was issued; from TY2025 to G/H (ST) or J/K (LT) if a
1099-DA was issued. Direct match on leg.wallet (D4/[R0-M2]) — never the private
optimize.rs::is_broker.
description: StringColumn (a): the BTC amount, 8dp + " BTC" (e.g. "0.53000000 BTC"). Computed as EXACT
Decimal (Decimal::from(sat) / SATS_PER_BTC) — NEVER sat as f64 / 1e8 [R0-M5].
date_acquired: TaxDateColumn (b): date acquired = the leg’s zone-aware holding-period start (leg.acquired_at).
date_sold: TaxDateColumn (c): date sold = the disposal’s disposed_at.
proceeds: UsdColumn (d): proceeds (allocated net proceeds, from the leg).
cost_basis: UsdColumn (e): cost basis (tax-reported basis, from the leg).
adjustment_code: StringColumn (f): adjustment code — always empty. No §1091 (wash sale is N/A to crypto) and no other adjustments are modelled.
adjustment_amount: UsdColumn (g): adjustment amount — always 0. See adjustment_code.
gain: UsdColumn (h): gain/loss (from the leg; for a NoGainNoLoss dual-basis gift leg this is 0).
wallet: WalletIdThe disposing wallet (CSV wallet column + the box_needs_review source).
disposition_kind: DisposeKindThe disposition kind (Sell/Spend), for the CSV disposition_kind column.
Trait Implementations§
Source§impl Clone for Form8949Row
impl Clone for Form8949Row
Source§fn clone(&self) -> Form8949Row
fn clone(&self) -> Form8949Row
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Form8949Row
impl Debug for Form8949Row
impl Eq for Form8949Row
Source§impl PartialEq for Form8949Row
impl PartialEq for Form8949Row
impl StructuralPartialEq for Form8949Row
Auto Trait Implementations§
impl Freeze for Form8949Row
impl RefUnwindSafe for Form8949Row
impl Send for Form8949Row
impl Sync for Form8949Row
impl Unpin for Form8949Row
impl UnsafeUnpin for Form8949Row
impl UnwindSafe for Form8949Row
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.