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
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 ZeroDDS Contributors
//! GIOP Wire-Codec-Fehler.
use alloc::string::String;
use zerodds_cdr::{DecodeError, EncodeError};
/// Result-Alias.
pub type GiopResult<T> = Result<T, GiopError>;
/// Fehler im GIOP-Wire-Codec.
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GiopError {
/// Header-Magic ist nicht `"GIOP"`. Spec §15.4.1.
InvalidMagic([u8; 4]),
/// GIOP-Major/Minor wird vom Codec nicht unterstuetzt.
UnsupportedVersion {
/// Major.
major: u8,
/// Minor.
minor: u8,
},
/// `message_type`-Octet ausserhalb 0..=7 (Spec §15.4.1 Tab 15-1).
UnknownMessageType(u8),
/// `reply_status`-Wert ausserhalb der 6 Spec-Werte
/// (Spec §15.4.3.1).
UnknownReplyStatus(u32),
/// `locate_status`-Wert ausserhalb der 5 Spec-Werte
/// (Spec §15.4.6.1).
UnknownLocateStatus(u32),
/// `addressing_disposition`-Wert ausserhalb 0..=2 (Spec §15.4.2.2).
UnknownAddressingDisposition(u16),
/// Fragment-Bit gesetzt aber GIOP-Version unterstuetzt keine
/// Fragments (Spec §15.4.9: GIOP 1.0 hat kein Fragment-Support).
FragmentNotSupported {
/// Major.
major: u8,
/// Minor.
minor: u8,
},
/// Body-Groesse ueberschreitet das `message_size`-Feld.
BodyTooLarge {
/// Body-Groesse.
body_size: usize,
/// Header-Limit.
message_size_field: u32,
},
/// CDR-Decode-Fehler.
Decode(DecodeError),
/// CDR-Encode-Fehler.
Encode(EncodeError),
/// Allgemeiner Wire-Format-Fehler mit Diagnose-String.
Malformed(String),
}
impl From<DecodeError> for GiopError {
fn from(e: DecodeError) -> Self {
Self::Decode(e)
}
}
impl From<EncodeError> for GiopError {
fn from(e: EncodeError) -> Self {
Self::Encode(e)
}
}