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:
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,