concision_linear/impls/params/
impl_serde.rs

1/*
2    Appellation: serde <impls>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5#![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}