global: returns (lump sum vs dca)

This commit is contained in:
nym21
2025-05-13 01:27:21 +02:00
parent 5014e0ce3e
commit 88a0c9ea03
16 changed files with 1575 additions and 288 deletions
+7 -1
View File
@@ -3,7 +3,7 @@ use std::ops::{Add, Div, Mul};
use serde::Serialize;
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
use super::Sats;
use super::{Sats, StoredF64};
#[derive(
Debug,
@@ -53,6 +53,12 @@ impl From<f64> for Bitcoin {
}
}
impl From<StoredF64> for Bitcoin {
fn from(value: StoredF64) -> Self {
Self(*value)
}
}
impl From<Bitcoin> for f64 {
fn from(value: Bitcoin) -> Self {
value.0
+7
View File
@@ -81,3 +81,10 @@ impl Mul<Cents> for Cents {
Self(self.0 * rhs.0)
}
}
impl Mul<usize> for Cents {
type Output = Cents;
fn mul(self, rhs: usize) -> Self::Output {
Self(self.0 * rhs as u64)
}
}
+35 -3
View File
@@ -7,7 +7,7 @@ use derive_deref::Deref;
use serde::Serialize;
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
use super::{Bitcoin, Cents, Close, Sats, StoredF32};
use super::{Bitcoin, Cents, Close, Sats, StoredF32, StoredF64};
#[derive(
Debug,
@@ -27,6 +27,10 @@ pub struct Dollars(f64);
impl Dollars {
pub const ZERO: Self = Self(0.0);
pub const fn mint(dollars: f64) -> Self {
Self(dollars)
}
}
impl From<f32> for Dollars {
@@ -79,9 +83,23 @@ impl Add for Dollars {
}
impl Div<Dollars> for Dollars {
type Output = StoredF32;
type Output = StoredF64;
fn div(self, rhs: Dollars) -> Self::Output {
StoredF32::from((self.0 / rhs.0) as f32)
StoredF64::from(self.0 / rhs.0)
}
}
impl Div<Close<Dollars>> for Dollars {
type Output = StoredF64;
fn div(self, rhs: Close<Dollars>) -> Self::Output {
StoredF64::from(self.0 / rhs.0)
}
}
impl Div<Dollars> for Close<Dollars> {
type Output = StoredF64;
fn div(self, rhs: Dollars) -> Self::Output {
StoredF64::from(self.0 / rhs.0)
}
}
@@ -92,6 +110,13 @@ impl Div<usize> for Dollars {
}
}
impl Div<Bitcoin> for Dollars {
type Output = Self;
fn div(self, rhs: Bitcoin) -> Self::Output {
Self(f64::from(self) / f64::from(rhs))
}
}
impl Eq for Dollars {}
#[allow(clippy::derive_ord_xor_partial_ord)]
@@ -121,6 +146,13 @@ impl Mul<StoredF32> for Dollars {
}
}
impl Mul<usize> for Dollars {
type Output = Self;
fn mul(self, rhs: usize) -> Self::Output {
Self::from(Cents::from(self) * rhs)
}
}
impl From<u128> for Dollars {
fn from(value: u128) -> Self {
Self::from(Cents::from(value))
+7 -1
View File
@@ -6,7 +6,7 @@ use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
use crate::CheckedSub;
use super::Dollars;
use super::{Dollars, StoredF64};
#[derive(
Debug,
@@ -36,6 +36,12 @@ impl From<f64> for StoredF32 {
}
}
impl From<StoredF64> for StoredF32 {
fn from(value: StoredF64) -> Self {
Self(*value as f32)
}
}
impl From<usize> for StoredF32 {
fn from(value: usize) -> Self {
Self(value as f32)
+14 -1
View File
@@ -1,4 +1,4 @@
use std::ops::{Add, Div};
use std::ops::{Add, Div, Mul};
use derive_deref::Deref;
use serde::Serialize;
@@ -40,6 +40,13 @@ impl CheckedSub<StoredF64> for StoredF64 {
}
}
impl Mul<usize> for StoredF64 {
type Output = Self;
fn mul(self, rhs: usize) -> Self::Output {
Self(self.0 * rhs as f64)
}
}
impl Div<usize> for StoredF64 {
type Output = Self;
fn div(self, rhs: usize) -> Self::Output {
@@ -68,3 +75,9 @@ impl Ord for StoredF64 {
self.0.partial_cmp(&other.0).unwrap()
}
}
impl CheckedSub<usize> for StoredF64 {
fn checked_sub(self, rhs: usize) -> Option<Self> {
Some(Self(self.0 - rhs as f64))
}
}