Coverage Report

Created: 2026-05-16 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/sval-2.19.0/src/data/option.rs
Line
Count
Source
1
use crate::{tags, Index, Label, Result, Stream, Value};
2
3
/**
4
The absence of any meaningful value.
5
*/
6
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7
pub struct Null;
8
9
impl Value for Null {
10
0
    fn stream<'sval, S: Stream<'sval> + ?Sized>(&'sval self, stream: &mut S) -> Result {
11
0
        stream.null()
12
0
    }
13
}
14
15
impl<T: Value> Value for Option<T> {
16
0
    fn stream<'a, S: Stream<'a> + ?Sized>(&'a self, stream: &mut S) -> Result {
17
0
        if let Some(some) = self {
18
0
            stream.tagged_begin(
19
0
                Some(&tags::RUST_OPTION_SOME),
20
0
                Some(&Label::new("Some").with_tag(&tags::VALUE_IDENT)),
21
0
                Some(&Index::new(1).with_tag(&tags::VALUE_OFFSET)),
22
0
            )?;
23
24
0
            stream.value(some)?;
25
26
0
            stream.tagged_end(
27
0
                Some(&tags::RUST_OPTION_SOME),
28
0
                Some(&Label::new("Some").with_tag(&tags::VALUE_IDENT)),
29
0
                Some(&Index::new(1).with_tag(&tags::VALUE_OFFSET)),
30
            )
31
        } else {
32
0
            stream.tag(
33
0
                Some(&tags::RUST_OPTION_NONE),
34
0
                Some(&Label::new("None").with_tag(&tags::VALUE_IDENT)),
35
0
                Some(&Index::new(0).with_tag(&tags::VALUE_OFFSET)),
36
            )
37
        }
38
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<dyn sval_dynamic::stream::Stream>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::tag::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_f32::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_f64::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_bool::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_i128::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_text::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_u128::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_binary::Extract>>
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::stream::<sval::value::default_value::tag::Extract>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<dyn sval_dynamic::stream::Stream>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::tag::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_f32::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_f64::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_bool::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_i128::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_text::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_u128::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::stream::Computed<sval::value::default_value::to_binary::Extract>>
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::stream::<sval::value::default_value::tag::Extract>
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::stream::<_>
39
40
    #[inline]
41
0
    fn to_bool(&self) -> Option<bool> {
42
0
        self.as_ref().and_then(|value| value.to_bool())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_bool::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_bool::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_bool::{closure#0}
43
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_bool
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_bool
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_bool
44
45
    #[inline]
46
0
    fn to_f32(&self) -> Option<f32> {
47
0
        self.as_ref().and_then(|value| value.to_f32())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_f32::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_f32::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_f32::{closure#0}
48
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_f32
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_f32
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_f32
49
50
    #[inline]
51
0
    fn to_f64(&self) -> Option<f64> {
52
0
        self.as_ref().and_then(|value| value.to_f64())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_f64::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_f64::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_f64::{closure#0}
53
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_f64
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_f64
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_f64
54
55
    #[inline]
56
0
    fn to_i8(&self) -> Option<i8> {
57
0
        self.as_ref().and_then(|value| value.to_i8())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i8::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i8::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i8::{closure#0}
58
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i8
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i8
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i8
59
60
    #[inline]
61
0
    fn to_i16(&self) -> Option<i16> {
62
0
        self.as_ref().and_then(|value| value.to_i16())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i16::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i16::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i16::{closure#0}
63
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i16
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i16
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i16
64
65
    #[inline]
66
0
    fn to_i32(&self) -> Option<i32> {
67
0
        self.as_ref().and_then(|value| value.to_i32())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i32::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i32::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i32::{closure#0}
68
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i32
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i32
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i32
69
70
    #[inline]
71
0
    fn to_i64(&self) -> Option<i64> {
72
0
        self.as_ref().and_then(|value| value.to_i64())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i64::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i64::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i64::{closure#0}
73
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i64
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i64
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i64
74
75
    #[inline]
76
0
    fn to_i128(&self) -> Option<i128> {
77
0
        self.as_ref().and_then(|value| value.to_i128())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i128::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i128::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i128::{closure#0}
78
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_i128
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_i128
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_i128
79
80
    #[inline]
81
0
    fn to_u8(&self) -> Option<u8> {
82
0
        self.as_ref().and_then(|value| value.to_u8())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u8::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u8::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u8::{closure#0}
83
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u8
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u8
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u8
84
85
    #[inline]
86
0
    fn to_u16(&self) -> Option<u16> {
87
0
        self.as_ref().and_then(|value| value.to_u16())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u16::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u16::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u16::{closure#0}
88
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u16
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u16
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u16
89
90
    #[inline]
91
0
    fn to_u32(&self) -> Option<u32> {
92
0
        self.as_ref().and_then(|value| value.to_u32())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u32::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u32::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u32::{closure#0}
93
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u32
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u32
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u32
94
95
    #[inline]
96
0
    fn to_u64(&self) -> Option<u64> {
97
0
        self.as_ref().and_then(|value| value.to_u64())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u64::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u64::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u64::{closure#0}
98
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u64
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u64
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u64
99
100
    #[inline]
101
0
    fn to_u128(&self) -> Option<u128> {
102
0
        self.as_ref().and_then(|value| value.to_u128())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u128::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u128::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u128::{closure#0}
103
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_u128
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_u128
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_u128
104
105
    #[inline]
106
0
    fn to_text(&self) -> Option<&str> {
107
0
        self.as_ref().and_then(|value| value.to_text())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_text::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_text::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_text::{closure#0}
108
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_text
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_text
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_text
109
110
    #[inline]
111
0
    fn to_binary(&self) -> Option<&[u8]> {
112
0
        self.as_ref().and_then(|value| value.to_binary())
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_binary::{closure#0}
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_binary::{closure#0}
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_binary::{closure#0}
113
0
    }
Unexecuted instantiation: <core::option::Option<sval_serde::to_value::ToValue<&dyn erased_serde::ser::Serialize>> as sval::value::Value>::to_binary
Unexecuted instantiation: <core::option::Option<()> as sval::value::Value>::to_binary
Unexecuted instantiation: <core::option::Option<_> as sval::value::Value>::to_binary
114
}
115
116
#[cfg(test)]
117
mod tests {
118
    use super::*;
119
120
    #[test]
121
    fn option_cast() {
122
        assert_eq!(Some(1u8), Some(1u8).to_u8());
123
        assert_eq!(Some(2u16), Some(2u16).to_u16());
124
        assert_eq!(Some(3u32), Some(3u32).to_u32());
125
        assert_eq!(Some(4u64), Some(4u64).to_u64());
126
        assert_eq!(Some(42u128), Some(42u128).to_u128());
127
128
        assert_eq!(Some(1i8), Some(1i8).to_i8());
129
        assert_eq!(Some(2i16), Some(2i16).to_i16());
130
        assert_eq!(Some(3i32), Some(3i32).to_i32());
131
        assert_eq!(Some(4i64), Some(4i64).to_i64());
132
        assert_eq!(Some(42i128), Some(42i128).to_i128());
133
134
        assert_eq!(Some(3f32), Some(3f32).to_f32());
135
        assert_eq!(Some(4f64), Some(4f64).to_f64());
136
137
        assert_eq!(Some(true), Some(true).to_bool());
138
139
        assert_eq!(Some("a string"), Some("a string").to_text());
140
    }
141
142
    #[test]
143
    fn option_tag() {
144
        assert_eq!(Some(tags::RUST_OPTION_SOME), Some(42).tag());
145
        assert_eq!(Some(tags::RUST_OPTION_NONE), None::<i32>.tag());
146
    }
147
}