| // 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); |
| } |
| } |