Coverage Report

Created: 2025-10-10 07:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/rmp-0.8.14/src/decode/sint.rs
Line
Count
Source
1
use super::{read_marker, RmpRead, ValueReadError};
2
use crate::Marker;
3
4
/// Attempts to read a single byte from the given reader and to decode it as a negative fixnum
5
/// value.
6
///
7
/// According to the MessagePack specification, a negative fixed integer value is represented using
8
/// a single byte in `[0xe0; 0xff]` range inclusively, prepended with a special marker mask.
9
///
10
/// # Errors
11
///
12
/// This function will return `ValueReadError` on any I/O error while reading the marker,
13
/// except the EINTR, which is handled internally.
14
///
15
/// It also returns `ValueReadError::TypeMismatch` if the actual type is not equal with the
16
/// expected one, indicating you with the actual type.
17
///
18
/// # Note
19
///
20
/// This function will silently retry on every EINTR received from the underlying `Read` until
21
/// successful read.
22
0
pub fn read_nfix<R: RmpRead>(rd: &mut R) -> Result<i8, ValueReadError<R::Error>> {
23
0
    match read_marker(rd)? {
24
0
        Marker::FixNeg(val) => Ok(val),
25
0
        marker => Err(ValueReadError::TypeMismatch(marker)),
26
    }
27
0
}
28
29
/// Attempts to read exactly 2 bytes from the given reader and to decode them as `i8` value.
30
///
31
/// The first byte should be the marker and the second one should represent the data itself.
32
///
33
/// # Errors
34
///
35
/// This function will return `ValueReadError` on any I/O error while reading either the marker or
36
/// the data.
37
///
38
/// It also returns `ValueReadError::TypeMismatch` if the actual type is not equal with the
39
/// expected one, indicating you with the actual type.
40
///
41
/// # Note
42
///
43
/// This function will silently retry on every EINTR received from the underlying `Read` until
44
/// successful read.
45
0
pub fn read_i8<R: RmpRead>(rd: &mut R) -> Result<i8, ValueReadError<R::Error>> {
46
0
    match read_marker(rd)? {
47
0
        Marker::I8 => rd.read_data_i8(),
48
0
        marker => Err(ValueReadError::TypeMismatch(marker)),
49
    }
50
0
}
51
52
/// Attempts to read exactly 3 bytes from the given reader and to decode them as `i16` value.
53
///
54
/// The first byte should be the marker and the others should represent the data itself.
55
///
56
/// # Errors
57
///
58
/// This function will return `ValueReadError` on any I/O error while reading either the marker or
59
/// the data.
60
///
61
/// It also returns `ValueReadError::TypeMismatch` if the actual type is not equal with the
62
/// expected one, indicating you with the actual type.
63
///
64
/// # Note
65
///
66
/// This function will silently retry on every EINTR received from the underlying `Read` until
67
/// successful read.
68
0
pub fn read_i16<R: RmpRead>(rd: &mut R) -> Result<i16, ValueReadError<R::Error>> {
69
0
    match read_marker(rd)? {
70
0
        Marker::I16 => rd.read_data_i16(),
71
0
        marker => Err(ValueReadError::TypeMismatch(marker)),
72
    }
73
0
}
74
75
/// Attempts to read exactly 5 bytes from the given reader and to decode them as `i32` value.
76
///
77
/// The first byte should be the marker and the others should represent the data itself.
78
///
79
/// # Errors
80
///
81
/// This function will return `ValueReadError` on any I/O error while reading either the marker or
82
/// the data.
83
///
84
/// It also returns `ValueReadError::TypeMismatch` if the actual type is not equal with the
85
/// expected one, indicating you with the actual type.
86
///
87
/// # Note
88
///
89
/// This function will silently retry on every EINTR received from the underlying `Read` until
90
/// successful read.
91
0
pub fn read_i32<R: RmpRead>(rd: &mut R) -> Result<i32, ValueReadError<R::Error>> {
92
0
    match read_marker(rd)? {
93
0
        Marker::I32 => rd.read_data_i32(),
94
0
        marker => Err(ValueReadError::TypeMismatch(marker)),
95
    }
96
0
}
97
98
/// Attempts to read exactly 9 bytes from the given reader and to decode them as `i64` value.
99
///
100
/// The first byte should be the marker and the others should represent the data itself.
101
///
102
/// # Errors
103
///
104
/// This function will return `ValueReadError` on any I/O error while reading either the marker or
105
/// the data.
106
///
107
/// It also returns `ValueReadError::TypeMismatch` if the actual type is not equal with the
108
/// expected one, indicating you with the actual type.
109
///
110
/// # Note
111
///
112
/// This function will silently retry on every EINTR received from the underlying `Read` until
113
/// successful read.
114
0
pub fn read_i64<R: RmpRead>(rd: &mut R) -> Result<i64, ValueReadError<R::Error>> {
115
0
    match read_marker(rd)? {
116
0
        Marker::I64 => rd.read_data_i64(),
117
0
        marker => Err(ValueReadError::TypeMismatch(marker)),
118
    }
119
0
}