pub enum ParseError {
Empty,
Oversized,
MissingSeparator,
EmptySegment,
InvalidAddress,
}Expand description
Fail-closed packet parse errors.
Variants§
Empty
No bytes were supplied.
Oversized
Packet exceeds MAX_PACKET_LEN.
MissingSeparator
Packet does not contain the required APRS > and : separators.
EmptySegment
Packet contains an empty source, path, or payload segment.
InvalidAddress
Packet source or path contains bytes outside the conservative address set.
Implementations§
Source§impl ParseError
impl ParseError
Sourcepub fn code(&self) -> &'static str
pub fn code(&self) -> &'static str
Returns a stable parse error code for logs and external systems.
Examples found in repository?
examples/process_file.rs (line 28)
7fn main() -> std::io::Result<()> {
8 let Some(path) = std::env::args().nth(1) else {
9 eprintln!("usage: process_file <packets.aprs>");
10 std::process::exit(2);
11 };
12
13 let input = read_all_with_limit(File::open(path)?, DEFAULT_TRANSPORT_READ_LIMIT)?;
14 let mut engine = Engine::new(Policy::strict());
15
16 for packet_bytes in LineTransport::new(&input).packets() {
17 match engine.process(packet_bytes) {
18 EngineResult::Accepted { packet } => {
19 let summary = packet.summary();
20 println!(
21 "accepted source={} destination={} semantic={}",
22 String::from_utf8_lossy(summary.source),
23 String::from_utf8_lossy(summary.destination),
24 summary.semantic
25 );
26 }
27 EngineResult::Rejected { reason, .. } => eprintln!("rejected: {}", reason.code()),
28 EngineResult::ParseError(error) => eprintln!("malformed: {}", error.code()),
29 }
30 }
31
32 Ok(())
33}More examples
examples/encode_packets.rs (line 14)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let path = [b"APRS".as_slice(), b"WIDE1-1".as_slice()];
10
11 let status = encode_status(b"N0CALL", &path, b"encoder example")?;
12 assert_eq!(
13 parse_packet(&status)
14 .map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error.code()))?
15 .raw()
16 .as_bytes(),
17 b"N0CALL>APRS,WIDE1-1:>encoder example"
18 );
19
20 let position = encode_uncompressed_position(
21 b"N0CALL",
22 &path,
23 UncompressedPositionEncoding {
24 messaging: false,
25 latitude: b"4903.50N",
26 symbol_table: b'/',
27 longitude: b"07201.75W",
28 symbol_code: b'-',
29 comment: b"encoded",
30 },
31 )?;
32 assert_eq!(
33 parse_packet(&position)
34 .map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error.code()))?
35 .summary()
36 .semantic,
37 "position"
38 );
39
40 let telemetry = encode_telemetry(b"N0CALL", &path, 1, [111, 222, 33, 44, 55], None)?;
41 assert_eq!(
42 parse_packet(&telemetry)
43 .map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error.code()))?
44 .summary()
45 .semantic,
46 "telemetry"
47 );
48
49 Ok(())
50}Sourcepub fn diagnostic(&self) -> ErrorDiagnostic
pub fn diagnostic(&self) -> ErrorDiagnostic
Returns structured parse error metadata for operator diagnostics.
Trait Implementations§
Source§impl Clone for ParseError
impl Clone for ParseError
Source§fn clone(&self) -> ParseError
fn clone(&self) -> ParseError
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ParseError
impl Debug for ParseError
Source§impl PartialEq for ParseError
impl PartialEq for ParseError
impl Eq for ParseError
impl StructuralPartialEq for ParseError
Auto Trait Implementations§
impl Freeze for ParseError
impl RefUnwindSafe for ParseError
impl Send for ParseError
impl Sync for ParseError
impl Unpin for ParseError
impl UnsafeUnpin for ParseError
impl UnwindSafe for ParseError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more