concision_linear/impls/params/
impl_serde.rs1#![cfg(feature = "serde")]
6
7use crate::params::{Parameter, ParamsBase};
8use core::marker::PhantomData;
9use nd::*;
10use serde::{Deserialize, Deserializer, Serialize, Serializer};
11
12impl<'a, A, S, D, K> Deserialize<'a> for ParamsBase<S, D, K>
13where
14 A: Deserialize<'a>,
15 D: Deserialize<'a> + RemoveAxis,
16 S: DataOwned<Elem = A>,
17 <D as Dimension>::Smaller: Deserialize<'a> + Dimension,
18{
19 fn deserialize<Der>(deserializer: Der) -> Result<Self, Der::Error>
20 where
21 Der: Deserializer<'a>,
22 {
23 let (bias, weights) = Deserialize::deserialize(deserializer)?;
24 Ok(Self {
25 bias,
26 weight: weights,
27 _mode: PhantomData,
28 })
29 }
30}
31
32impl<A, S, D, K> Serialize for ParamsBase<S, D, K>
33where
34 A: Serialize,
35 D: RemoveAxis + Serialize,
36 S: Data<Elem = A>,
37 <D as Dimension>::Smaller: Dimension + Serialize,
38{
39 fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
40 where
41 Ser: Serializer,
42 {
43 (self.bias.as_ref(), self.weights()).serialize(serializer)
44 }
45}
46
47impl<A, S, D> Serialize for Parameter<S, D>
48where
49 A: Serialize,
50 S: Data<Elem = A>,
51 D: RemoveAxis + Serialize,
52 <D as Dimension>::Smaller: Dimension + Serialize,
53{
54 fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
55 where
56 Ser: Serializer,
57 {
58 match self {
59 Self::Bias(bias) => bias.serialize(serializer),
60 Self::Weight(weight) => weight.serialize(serializer),
61 }
62 }
63}