aldrin_core/adapters/
result.rs1use crate::tags::{self, PrimaryTag, Tag};
2use crate::{Serialize, SerializeError, Serializer};
3use std::convert::Infallible;
4
5#[derive(Debug, Copy, Clone)]
6pub struct AsOk<T>(pub T);
7
8impl<T: PrimaryTag> PrimaryTag for AsOk<T> {
9 type Tag = Result<T::Tag, tags::Value>;
10}
11
12impl<T: Tag, E: Tag, U: Serialize<T>> Serialize<Result<T, E>> for AsOk<U> {
13 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
14 serializer.serialize::<Result<_, E>>(Ok::<_, Infallible>(self.0))
15 }
16}
17
18impl<'a, T, E, U> Serialize<Result<T, E>> for &'a AsOk<U>
19where
20 T: Tag,
21 E: Tag,
22 &'a U: Serialize<T>,
23{
24 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
25 serializer.serialize::<Result<_, E>>(Ok::<_, Infallible>(&self.0))
26 }
27}
28
29#[derive(Debug, Copy, Clone)]
30pub struct AsErr<T>(pub T);
31
32impl<T: PrimaryTag> PrimaryTag for AsErr<T> {
33 type Tag = Result<tags::Value, T::Tag>;
34}
35
36impl<T: Tag, E: Tag, F: Serialize<E>> Serialize<Result<T, E>> for AsErr<F> {
37 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
38 serializer.serialize::<Result<T, _>>(Err::<Infallible, _>(self.0))
39 }
40}
41
42impl<'a, T, E, F> Serialize<Result<T, E>> for &'a AsErr<F>
43where
44 T: Tag,
45 E: Tag,
46 &'a F: Serialize<E>,
47{
48 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
49 serializer.serialize::<Result<T, _>>(Err::<Infallible, _>(&self.0))
50 }
51}