decthings_api/client/
parameter.rs1use serde::{Deserialize, Serialize, Serializer};
2
3use crate::tensor::{DecthingsTensor, OwnedDecthingsTensor};
4
5#[derive(Debug, Clone, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct DecthingsParameter {
8 pub name: String,
9 #[serde(skip_deserializing)]
10 pub data: Vec<OwnedDecthingsTensor>,
11}
12
13fn serialize_null<T, S: Serializer>(_: T, serializer: S) -> Result<S::Ok, S::Error> {
14 serializer.serialize_none()
15}
16
17#[derive(Debug, Clone, Serialize)]
18#[serde(tag = "type", rename_all = "camelCase", bound(serialize = ""))]
19pub enum DecthingsParameterProviderData<'a> {
20 #[serde(serialize_with = "serialize_null")]
21 Data(Vec<DecthingsTensor<'a>>),
22 Dataset {
23 dataset_id: &'a str,
24 dataset_key: &'a str,
25 },
26}
27impl DecthingsParameterProviderData<'_> {
28 fn is_data(&self) -> bool {
29 match self {
30 Self::Data(_) => true,
31 Self::Dataset { .. } => false,
32 }
33 }
34}
35
36#[derive(Debug, Clone, Serialize)]
37#[serde(rename_all = "camelCase", bound(serialize = ""))]
38pub struct DecthingsParameterProvider<'a> {
39 pub name: &'a str,
40 #[serde(skip_serializing_if = "DecthingsParameterProviderData::is_data")]
41 pub data: DecthingsParameterProviderData<'a>,
42}
43
44pub(crate) fn serialize_parameter_provider_list<'a, 'b: 'a>(
45 list: impl Iterator<Item = &'a DecthingsParameterProvider<'b>>,
46) -> Vec<Vec<u8>> {
47 list.filter_map(|x| match &x.data {
48 DecthingsParameterProviderData::Dataset { .. } => None,
49 DecthingsParameterProviderData::Data(d) => Some(d),
50 })
51 .map(|x| {
52 let mut res = Vec::with_capacity(x.iter().map(|x| x.serialized_len()).sum::<usize>());
53 for element in x {
54 element.serialize_append(&mut res);
55 }
56 res
57 })
58 .collect()
59}