lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit 40bb0ef1f3fb14f1b7cd555589d172b142fdc6be
parent f305b40e83ffb987c22c94870d7b814abfe3c4a2
Author: triesap <tyson@radroots.org>
Date:   Sat, 21 Feb 2026 01:55:39 +0000

core: add ts-rs derives for public models

Diffstat:
Mcrates/core/src/currency.rs | 4++++
Mcrates/core/src/decimal.rs | 4++++
Mcrates/core/src/discount.rs | 10++++++++++
Mcrates/core/src/money.rs | 6++++++
Mcrates/core/src/percent.rs | 5+++++
Mcrates/core/src/quantity.rs | 5+++++
Mcrates/core/src/quantity_price.rs | 4++++
Mcrates/core/src/unit.rs | 6++++++
8 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/crates/core/src/currency.rs b/crates/core/src/currency.rs @@ -9,8 +9,12 @@ use std::string::String; #[cfg(feature = "serde")] use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as DeError}; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts", type = "string"))] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RadrootsCoreCurrency([u8; 3]); diff --git a/crates/core/src/decimal.rs b/crates/core/src/decimal.rs @@ -11,8 +11,12 @@ use alloc::{format, string::ToString}; #[cfg(feature = "serde")] use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as DeError}; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts", type = "string"))] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] pub struct RadrootsCoreDecimal(pub Decimal); diff --git a/crates/core/src/discount.rs b/crates/core/src/discount.rs @@ -2,9 +2,13 @@ use alloc::string::String; #[cfg(feature = "std")] use std::string::String; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))] pub enum RadrootsCoreDiscountScope { @@ -14,6 +18,8 @@ pub enum RadrootsCoreDiscountScope { #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr( feature = "serde", @@ -26,6 +32,8 @@ pub enum RadrootsCoreDiscountThreshold { #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr( feature = "serde", @@ -38,6 +46,8 @@ pub enum RadrootsCoreDiscountValue { #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))] pub struct RadrootsCoreDiscount { diff --git a/crates/core/src/money.rs b/crates/core/src/money.rs @@ -2,12 +2,18 @@ use core::fmt; use rust_decimal::Decimal; use rust_decimal::RoundingStrategy; use rust_decimal::prelude::ToPrimitive; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct RadrootsCoreMoney { + #[cfg_attr(feature = "ts-rs", ts(type = "string"))] pub amount: crate::RadrootsCoreDecimal, + #[cfg_attr(feature = "ts-rs", ts(type = "string"))] pub currency: crate::RadrootsCoreCurrency, } diff --git a/crates/core/src/percent.rs b/crates/core/src/percent.rs @@ -3,11 +3,16 @@ use core::str::FromStr; use crate::RadrootsCoreDecimal; use crate::money::RadrootsCoreMoney; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct RadrootsCorePercent { + #[cfg_attr(feature = "ts-rs", ts(type = "string"))] #[cfg_attr(feature = "serde", serde(with = "crate::serde_ext::decimal_str"))] pub value: RadrootsCoreDecimal, } diff --git a/crates/core/src/quantity.rs b/crates/core/src/quantity.rs @@ -7,11 +7,16 @@ use crate::unit::{RadrootsCoreUnit, RadrootsCoreUnitConvertError, convert_unit_d use alloc::string::String; #[cfg(feature = "std")] use std::string::String; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct RadrootsCoreQuantity { + #[cfg_attr(feature = "ts-rs", ts(type = "string"))] #[cfg_attr(feature = "serde", serde(with = "crate::serde_ext::decimal_str"))] pub amount: RadrootsCoreDecimal, pub unit: RadrootsCoreUnit, diff --git a/crates/core/src/quantity_price.rs b/crates/core/src/quantity_price.rs @@ -1,7 +1,11 @@ use crate::{RadrootsCoreDecimal, RadrootsCoreMoney, RadrootsCoreQuantity, RadrootsCoreUnit}; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct RadrootsCoreQuantityPrice { #[cfg_attr(feature = "serde", serde(alias = "money", alias = "price"))] diff --git a/crates/core/src/unit.rs b/crates/core/src/unit.rs @@ -10,10 +10,14 @@ use std::string::String; #[cfg(feature = "serde")] use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as DeError}; +#[cfg(feature = "ts-rs")] +use ts_rs::TS; use crate::RadrootsCoreDecimal; #[cfg_attr(feature = "typeshare", typeshare::typeshare)] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum RadrootsCoreUnitDimension { Count, @@ -22,6 +26,8 @@ pub enum RadrootsCoreUnitDimension { } #[cfg_attr(feature = "typeshare", typeshare::typeshare)] +#[cfg_attr(feature = "ts-rs", derive(TS))] +#[cfg_attr(feature = "ts-rs", ts(export, export_to = "types.ts"))] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum RadrootsCoreUnit { Each,