Skip to main content

diffsol_c/
scalar_type.rs

1// Data type Python enum
2
3#[cfg(feature = "external")]
4use diffsl::execution::external::ExternSymbols;
5use diffsol::DiffSlScalar;
6use schemars::JsonSchema;
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
10#[serde(rename_all = "snake_case")]
11pub enum ScalarType {
12    F32,
13    F64,
14}
15
16pub trait Scalar: DiffSlScalar + ToScalarType {}
17
18impl<T: DiffSlScalar + ToScalarType> Scalar for T {}
19
20#[cfg(feature = "external")]
21pub trait ExternalScalar: Scalar + ExternSymbols {}
22
23#[cfg(feature = "external")]
24impl<T: Scalar + ExternSymbols> ExternalScalar for T {}
25
26pub trait ToScalarType {
27    fn scalar_type() -> ScalarType;
28}
29
30impl ToScalarType for f32 {
31    fn scalar_type() -> ScalarType {
32        ScalarType::F32
33    }
34}
35
36impl ToScalarType for f64 {
37    fn scalar_type() -> ScalarType {
38        ScalarType::F64
39    }
40}