1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use datafusion_common::DataFusionError;
pub fn csv_delimiter_to_string(b: u8) -> Result<String, DataFusionError> {
let b = &[b];
let b = std::str::from_utf8(b)
.map_err(|_| DataFusionError::Internal("Invalid CSV delimiter".to_owned()))?;
Ok(b.to_owned())
}
pub fn str_to_byte(s: &String) -> Result<u8, DataFusionError> {
if s.len() != 1 {
return Err(DataFusionError::Internal(
"Invalid CSV delimiter".to_owned(),
));
}
Ok(s.as_bytes()[0])
}
pub fn byte_to_string(b: u8) -> Result<String, DataFusionError> {
let b = &[b];
let b = std::str::from_utf8(b)
.map_err(|_| DataFusionError::Internal("Invalid CSV delimiter".to_owned()))?;
Ok(b.to_owned())
}
#[macro_export]
macro_rules! convert_required {
($PB:expr) => {{
if let Some(field) = $PB.as_ref() {
Ok(field.try_into()?)
} else {
Err(proto_error("Missing required field in protobuf"))
}
}};
}
#[macro_export]
macro_rules! into_required {
($PB:expr) => {{
if let Some(field) = $PB.as_ref() {
Ok(field.into())
} else {
Err(proto_error("Missing required field in protobuf"))
}
}};
}
#[macro_export]
macro_rules! convert_box_required {
($PB:expr) => {{
if let Some(field) = $PB.as_ref() {
field.as_ref().try_into()
} else {
Err(proto_error("Missing required field in protobuf"))
}
}};
}
pub fn proto_error<S: Into<String>>(message: S) -> DataFusionError {
DataFusionError::Internal(message.into())
}