// Protocol Buffers - Google's data interchange format // Copyright 2023 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 //! Kernel-agnostic logic for the Rust Protobuf runtime that should not be //! exposed to through the `protobuf` path but must be public for use by //! generated code. // Used by the proto! macro pub use paste::paste; use crate::map; pub use crate::r#enum::Enum; use crate::repeated; pub use crate::ProtoStr; use crate::Proxied; pub use std::fmt::Debug; // TODO: Temporarily re-export these symbols which are now under // __runtime under __internal since some external callers using it through // __internal. pub use crate::__runtime::{PtrAndLen, RawMap, RawMessage, RawRepeatedField}; /// Used to protect internal-only items from being used accidentally. #[derive(Debug)] pub struct Private; /// A trait that is used as a subtrait of traits that we intend to be used but /// not be implemented by users. /// /// This is slightly less 'sealed' than the typical sealed trait pattern would /// permit in other crates; this trait is intended to be available to crates /// which were generated by protoc, but not to application code. /// /// We require Sized as a supertrait, because we generally do not want our /// traits to support trait objects. pub trait SealedInternal: Sized {} /// A trait used by the proto_eq() gtest macro. pub trait MatcherEq: SealedInternal + Debug { fn matches(&self, o: &Self) -> bool; } /// Used by the proto! macro to get a default value for a repeated field. pub fn get_repeated_default_value( _: Private, _: repeated::RepeatedView<'_, T>, ) -> T { Default::default() } /// Used by the proto! macro to get a default value for a map field. pub fn get_map_default_value + Default>( _: Private, _: map::MapView<'_, K, V>, ) -> V { Default::default() }