Implement JSON and Protobuf OSD codecs

This commit is contained in:
2026-08-09 01:30:59 +00:00
parent 84bc31d031
commit 6d02db8a9a
15 changed files with 1365 additions and 47 deletions

View File

@@ -120,6 +120,7 @@ fn starts_with_ignore_ascii_case(value: &str, prefix: &str) -> bool {
#[cfg(test)]
mod tests {
use super::*;
use std::collections::HashMap;
#[test]
fn byte_dispatch_recognizes_headers_bom_whitespace_and_json_tokens() {
@@ -164,31 +165,16 @@ mod tests {
deserialize_bytes(b"<llsd><undef /></llsd>".to_vec()),
Ok(OSD::Undefined)
);
let cases: &[(&[u8], &str)] = &[
(
b"<? llsd/protobuf ?>",
"M:LibreMetaverse.StructuredData.OSDParser.DeserializeLLSDProtobuf(System.Byte[])",
),
(
b"{}",
"M:LibreMetaverse.StructuredData.OSDParser.DeserializeJson(System.String)",
),
];
for (input, expected_member) in cases {
assert_eq!(
deserialize_bytes(input.to_vec())
.expect_err("format decoder is intentionally owned by a later issue")
.csharp_member(),
Some(*expected_member)
);
}
assert_eq!(
deserialize_bytes(b"<? llsd/protobuf ?>".to_vec()),
Ok(OSD::Undefined)
);
assert_eq!(
deserialize_bytes(b"{}".to_vec()),
Ok(OSD::Map(HashMap::new()))
);
let stream = Box::new(std::io::Cursor::new(b"{}".to_vec()));
assert_eq!(
deserialize_stream(stream)
.expect_err("JSON decoder is intentionally owned by issue #36")
.csharp_member(),
Some("M:LibreMetaverse.StructuredData.OSDParser.DeserializeJson(System.String)")
);
assert_eq!(deserialize_stream(stream), Ok(OSD::Map(HashMap::new())));
}
}