1#[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}