decthings_api/tensor/
mod.rs1mod element;
2mod tensor_impl;
3
4pub use element::*;
5pub use tensor_impl::*;
6
7use serde::{ser::SerializeSeq, Deserialize, Serialize, Serializer};
8
9fn serialize_shape<S: Serializer>(
10 values: &[Option<u32>],
11 serializer: S,
12) -> Result<S::Ok, S::Error> {
13 let mut seq = serializer.serialize_seq(Some(values.len()))?;
14 for value in values {
15 if let Some(value) = value {
16 seq.serialize_element(value)?;
17 } else {
18 seq.serialize_element(&-1i8)?;
19 }
20 }
21 seq.end()
22}
23
24fn deserialize_shape<'de, D: serde::Deserializer<'de>>(
25 deserializer: D,
26) -> Result<Vec<Option<u32>>, D::Error> {
27 let a = Vec::<i64>::deserialize(deserializer)?;
28 Ok(a.into_iter().map(|x| x.try_into().ok()).collect())
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct DecthingsTensorRules {
34 #[serde(
35 serialize_with = "serialize_shape",
36 deserialize_with = "deserialize_shape"
37 )]
38 pub shape: Vec<Option<u32>>,
39 pub allowed_types: Vec<DecthingsElementType>,
40 pub annotations: Vec<String>,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct DecthingsParameterDefinition {
48 pub name: String,
49 pub required: bool,
50 pub rules: DecthingsTensorRules,
51}