|  | // 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 | 
|  |  | 
|  | use super::sys::mini_table::mini_table::{RawMiniTable, RawMiniTableEnum}; | 
|  |  | 
|  | /// A trait for types which have an associated MiniTable (e.g. generated | 
|  | /// messages, and their mut and view proxy types). | 
|  | /// | 
|  | /// upb_Message in C is effectively a DST type, where instances are created with | 
|  | /// a MiniTable (and have a size dependent on the given MiniTable). Many upb | 
|  | /// operations on the upb_Message* will require the same upb_MiniTable* to be | 
|  | /// passed in as a parameter, which is referred to as 'the associated MiniTable | 
|  | /// for the upb_Message instance' in safety comments. | 
|  | /// | 
|  | /// This trait is a way to associate a MiniTable with Rust types | 
|  | /// which hold upb_Message* to simplify ensuring the upb C invariants | 
|  | /// are maintained. | 
|  | /// | 
|  | /// SAFETY: | 
|  | /// - The MiniTable pointer must be from Protobuf code generation and follow the | 
|  | ///   corresponding invariants associated with upb's C API (the pointer should | 
|  | ///   always have the same non-null value, the underlying pointee should never | 
|  | ///   be modified and should have 'static lifetime). | 
|  | pub unsafe trait AssociatedMiniTable { | 
|  | fn mini_table() -> RawMiniTable; | 
|  | } | 
|  |  | 
|  | /// A trait for closed enums that have an associated MiniTable. | 
|  | pub unsafe trait AssociatedMiniTableEnum { | 
|  | fn mini_table() -> RawMiniTableEnum; | 
|  | } |