#protobuf #rust Mark {Map, Repeated}::new() as public

* Matches the C++ Protobuf API.
 * Improves ergonomics by allowing users to provide Into, FromIterator, et. al. implementations.
 * Allows owned types to be returned from functions.

PiperOrigin-RevId: 615008080
pull/16129/head
Jakob Buchgraber 2024-03-12 05:45:32 -07:00 committed by Copybara-Service
parent 9ff062cd34
commit ad5e55ab92
2 changed files with 18 additions and 4 deletions

View File

@ -163,8 +163,7 @@ where
K: Proxied + ?Sized,
V: ProxiedInMapValue<K> + ?Sized,
{
#[allow(dead_code)]
pub(crate) fn new() -> Self {
pub fn new() -> Self {
V::map_new(Private)
}
@ -186,6 +185,16 @@ where
}
}
impl<K, V> Default for Map<K, V>
where
K: Proxied + ?Sized,
V: ProxiedInMapValue<K> + ?Sized,
{
fn default() -> Self {
Map::new()
}
}
#[doc(hidden)]
impl<'msg, K: ?Sized, V: ?Sized> MapView<'msg, K, V> {
#[doc(hidden)]

View File

@ -280,8 +280,7 @@ pub struct Repeated<T: ?Sized + ProxiedInRepeated> {
}
impl<T: ?Sized + ProxiedInRepeated> Repeated<T> {
#[allow(dead_code)]
pub(crate) fn new() -> Self {
pub fn new() -> Self {
T::repeated_new(Private)
}
@ -294,6 +293,12 @@ impl<T: ?Sized + ProxiedInRepeated> Repeated<T> {
}
}
impl<T: ?Sized + ProxiedInRepeated> Default for Repeated<T> {
fn default() -> Self {
Repeated::new()
}
}
impl<T: ?Sized + ProxiedInRepeated> Drop for Repeated<T> {
fn drop(&mut self) {
// SAFETY: only called once