Skip to content

Commit c61b012

Browse files
Revert "String parsing for char[]" (#376)
* Revert "String parsing for char[] (#343)" This reverts commit aeac5d9. * mavlink: tests: Update test to match current char[] behavior
1 parent 55983ba commit c61b012

4 files changed

Lines changed: 19 additions & 78 deletions

File tree

mavlink-bindgen/src/parser.rs

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ impl MavMessage {
567567
// If sent by an implementation that doesn't have the extensions fields
568568
// then the recipient will see zero values for the extensions fields.
569569
let serde_default = if field.is_extension {
570-
if field.enumtype.is_some() || matches!(field.mavtype, MavType::String(_)) {
570+
if field.enumtype.is_some() {
571571
quote!(#[cfg_attr(feature = "serde", serde(default))])
572572
} else {
573573
quote!(#[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))])
@@ -928,7 +928,6 @@ pub enum MavType {
928928
Char,
929929
Float,
930930
Double,
931-
String(usize),
932931
Array(Box<MavType>, usize),
933932
}
934933

@@ -954,11 +953,7 @@ impl MavType {
954953
let start = s.find('[')?;
955954
let size = s[start + 1..(s.len() - 1)].parse::<usize>().ok()?;
956955
let mtype = Self::parse_type(&s[0..start])?;
957-
if mtype == Char {
958-
Some(String(size))
959-
} else {
960-
Some(Array(Box::new(mtype), size))
961-
}
956+
Some(Array(Box::new(mtype), size))
962957
} else {
963958
None
964959
}
@@ -982,19 +977,7 @@ impl MavType {
982977
Int64 => quote! {#val = #buf.get_i64_le();},
983978
Float => quote! {#val = #buf.get_f32_le();},
984979
Double => quote! {#val = #buf.get_f64_le();},
985-
String(size) => {
986-
let r = Char.rust_reader(&quote!(let next_char), buf);
987-
quote! {
988-
for _ in 0..#size {
989-
#r
990-
if next_char == 0 {
991-
break;
992-
}
993-
#val.push(next_char as char);
994-
}
995-
}
996-
}
997-
Array(t, _size) => {
980+
Array(t, _) => {
998981
let r = t.rust_reader(&quote!(let val), buf);
999982
quote! {
1000983
for v in &mut #val {
@@ -1022,15 +1005,6 @@ impl MavType {
10221005
UInt64 => quote! {#buf.put_u64_le(#val);},
10231006
Int64 => quote! {#buf.put_i64_le(#val);},
10241007
Double => quote! {#buf.put_f64_le(#val);},
1025-
String(_size) => {
1026-
let w = Char.rust_writer(&quote!(*val), buf);
1027-
quote! {
1028-
let slice = #val.as_bytes();
1029-
for val in slice {
1030-
#w
1031-
}
1032-
}
1033-
}
10341008
Array(t, _size) => {
10351009
let w = t.rust_writer(&quote!(*val), buf);
10361010
quote! {
@@ -1050,7 +1024,6 @@ impl MavType {
10501024
UInt16 | Int16 => 2,
10511025
UInt32 | Int32 | Float => 4,
10521026
UInt64 | Int64 | Double => 8,
1053-
String(size) => Char.len() * size,
10541027
Array(t, size) => t.len() * size,
10551028
}
10561029
}
@@ -1063,7 +1036,6 @@ impl MavType {
10631036
UInt16 | Int16 => 2,
10641037
UInt32 | Int32 | Float => 4,
10651038
UInt64 | Int64 | Double => 8,
1066-
String(_) => Char.len(),
10671039
Array(t, _) => t.len(),
10681040
}
10691041
}
@@ -1084,7 +1056,6 @@ impl MavType {
10841056
UInt64 => "uint64_t".into(),
10851057
Int64 => "int64_t".into(),
10861058
Double => "double".into(),
1087-
String(_) => "char".into(),
10881059
Array(t, _) => t.primitive_type(),
10891060
}
10901061
}
@@ -1105,7 +1076,6 @@ impl MavType {
11051076
UInt64 => "u64".into(),
11061077
Int64 => "i64".into(),
11071078
Double => "f64".into(),
1108-
String(size) => format!("arrayvec::ArrayString<{size}>"),
11091079
Array(t, size) => format!("[{};{}]", t.rust_type(), size),
11101080
}
11111081
}
@@ -1124,7 +1094,6 @@ impl MavType {
11241094
UInt64 => quote!(0_u64),
11251095
Int64 => quote!(0_i64),
11261096
Double => quote!(0.0_f64),
1127-
String(size) => quote!(arrayvec::ArrayString::<#size>::new_const()),
11281097
Array(ty, size) => {
11291098
let default_value = ty.emit_default_value();
11301099
quote!([#default_value; #size])
@@ -1575,7 +1544,7 @@ pub fn extra_crc(msg: &MavMessage) -> u8 {
15751544
crc.digest(field.name.as_bytes());
15761545
}
15771546
crc.digest(b" ");
1578-
if let MavType::String(size) | MavType::Array(_, size) = field.mavtype {
1547+
if let MavType::Array(_, size) = field.mavtype {
15791548
crc.digest(&[size as u8]);
15801549
}
15811550
}

mavlink/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ serde = { version = "1.0.115", optional = true, features = ["derive"] }
3737
serde_arrays = { version = "0.2.0", optional = true }
3838
arbitrary = { version = "1.4", optional = true, features = ["derive"] }
3939
rand = { version = "0.9", optional = true, default-features = false, features = ["std", "std_rng"] }
40-
arrayvec = { version = "0.7.6", default-features = false }
4140

4241
[features]
4342
default = ["std", "tcp", "udp", "direct-serial", "serde", "ardupilotmega", "common"]
@@ -86,7 +85,7 @@ all-dialects = [
8685
format-generated-code = []
8786
emit-description = ["mavlink-bindgen/emit-description"]
8887
emit-extensions = ["mavlink-bindgen/emit-extensions"]
89-
std = ["mavlink-core/std", "arrayvec/std"]
88+
std = ["mavlink-core/std"]
9089
udp = ["mavlink-core/udp"]
9190
tcp = ["mavlink-core/tcp"]
9291
signing = ["mavlink-core/signing"]
@@ -96,7 +95,7 @@ direct-serial = ["mavlink-core/direct-serial"]
9695
# Use 'embedded-hal-0.2' feature to enable deprecated embedded-hal=0.2.3 (some hals is not supports embedded-hal=1.0 yet).
9796
embedded = ["mavlink-core/embedded"]
9897
embedded-hal-02 = ["mavlink-core/embedded-hal-02"]
99-
serde = ["bitflags/serde", "dep:serde", "dep:serde_arrays", "mavlink-core/serde", "arrayvec/serde"]
98+
serde = ["bitflags/serde", "dep:serde", "dep:serde_arrays", "mavlink-core/serde"]
10099
tokio-1 = ["mavlink-core/tokio-1"]
101100
arbitrary = ["dep:arbitrary", "dep:rand", "mavlink-bindgen/arbitrary", "mavlink-core/arbitrary"]
102101

mavlink/tests/serde_test.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ mod serde_test {
125125
f: f32::EPSILON,
126126
f_array: [f32::NEG_INFINITY, 0.0, f32::MIN],
127127
c: b'R',
128-
s: arrayvec::ArrayString::from("rustmavlin").unwrap(), // 10 chars
128+
s: *b"rustmavlin", // 10 chars
129129
});
130130
assert_tokens(
131131
&test_message,
@@ -203,7 +203,18 @@ mod serde_test {
203203
Str("c"),
204204
U8(b'R'),
205205
Str("s"),
206-
Str("rustmavlin"),
206+
Tuple { len: 10 },
207+
U8(b'r'),
208+
U8(b'u'),
209+
U8(b's'),
210+
U8(b't'),
211+
U8(b'm'),
212+
U8(b'a'),
213+
U8(b'v'),
214+
U8(b'l'),
215+
U8(b'i'),
216+
U8(b'n'),
217+
TupleEnd,
207218
Str("u8"),
208219
U8(0),
209220
Str("s8"),

mavlink/tests/v2_encode_decode_tests.rs

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -166,42 +166,4 @@ mod test_v2_encode_decode {
166166
}
167167
}
168168
}
169-
170-
pub const STATUSTEXT_V2: &[u8] = &[
171-
mavlink::MAV_STX_V2,
172-
0x06, // payload is 6 bytes.``
173-
0x00,
174-
0x00,
175-
0x05,
176-
0x2a,
177-
0x04,
178-
0xfd, // This is STATUSTEXT
179-
0x00,
180-
0x00,
181-
0x02, // Severity
182-
0x79, // "y"
183-
0x6f, // "o"
184-
0x75, // "u"
185-
0x70, // "p"
186-
0x69, // "i"
187-
0x49, // CRC
188-
0x00, // CRC
189-
];
190-
191-
/// It is in the V2 tests because of the trail of 0s that gets truncated at the end.
192-
#[test]
193-
pub fn test_read_string() {
194-
let mut r = PeekReader::new(STATUSTEXT_V2);
195-
let (_header, msg) = mavlink::read_v2_msg(&mut r).expect("Failed to parse message");
196-
197-
if let mavlink::common::MavMessage::STATUSTEXT(data) = msg {
198-
assert_eq!(
199-
data.severity,
200-
mavlink::common::MavSeverity::MAV_SEVERITY_CRITICAL
201-
);
202-
assert_eq!(data.text.as_str(), "youpi");
203-
} else {
204-
panic!("Decoded wrong message type")
205-
}
206-
}
207169
}

0 commit comments

Comments
 (0)