| // Protocol Buffers - Google's data interchange format | |
| // Copyright 2024 Google LLC. All rights reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file or at | |
| // https://developers.google.com/open-source/licenses/bsd | |
| mod sys { | |
| pub use super::super::super::*; | |
| } | |
| use sys::mem::arena::RawArena; | |
| use sys::message::message::RawMessage; | |
| use sys::mini_table::extension_registry::upb_ExtensionRegistry; | |
| use sys::mini_table::mini_table::RawMiniTable; | |
| // LINT.IfChange(encode_status) | |
| #[repr(C)] | |
| #[derive(PartialEq, Eq, Copy, Clone, Debug)] | |
| pub enum EncodeStatus { | |
| Ok = 0, | |
| OutOfMemory = 1, | |
| MaxDepthExceeded = 2, | |
| MissingRequired = 3, | |
| } | |
| // LINT.ThenChange() | |
| // LINT.IfChange(decode_status) | |
| #[repr(C)] | |
| #[derive(PartialEq, Eq, Copy, Clone, Debug)] | |
| pub enum DecodeStatus { | |
| Ok = 0, | |
| Malformed = 1, | |
| OutOfMemory = 2, | |
| BadUtf8 = 3, | |
| MaxDepthExceeded = 4, | |
| MissingRequired = 5, | |
| UnlinkedSubMessage = 6, | |
| } | |
| // LINT.ThenChange() | |
| extern "C" { | |
| // SAFETY: | |
| // - `mini_table` is the one associated with `msg` | |
| // - `buf` and `buf_size` are legally writable. | |
| pub fn upb_Encode( | |
| msg: RawMessage, | |
| mini_table: RawMiniTable, | |
| options: i32, | |
| arena: RawArena, | |
| buf: *mut *mut u8, | |
| buf_size: *mut usize, | |
| ) -> EncodeStatus; | |
| // SAFETY: | |
| // - `mini_table` is the one associated with `msg` | |
| // - `buf` is legally readable for at least `buf_size` bytes. | |
| // - `extreg` is either null or points at a valid upb_ExtensionRegistry. | |
| pub fn upb_Decode( | |
| buf: *const u8, | |
| buf_size: usize, | |
| msg: RawMessage, | |
| mini_table: RawMiniTable, | |
| extreg: *const upb_ExtensionRegistry, | |
| options: i32, | |
| arena: RawArena, | |
| ) -> DecodeStatus; | |
| } | |
| #[cfg(test)] | |
| mod tests { | |
| use super::*; | |
| use googletest::gtest; | |
| #[gtest] | |
| fn assert_wire_linked() { | |
| use crate::assert_linked; | |
| assert_linked!(upb_Encode); | |
| assert_linked!(upb_Decode); | |
| } | |
| } |