#![allow(dead_code)]
#![allow(unused)]
use crate::__internal::runtime::InnerExtensionId;
use crate::__internal::{EntityType, Private, SealedInternal};
use crate::codegen_traits::entity_tag::*;
use crate::{
AsMut, AsView, Enum, IntoMut, IntoProxied, IntoView, Message, Mut, MutProxied, ProtoBytes,
ProtoString, Proxied, ProxiedInRepeated, Repeated, View,
};
use std::marker::PhantomData;
pub struct ExtensionId<Extendee, T: Proxied> {
number: u32,
pub(crate) inner: InnerExtensionId,
pub(crate) default: Option<View<'static, T>>,
phantom: PhantomData<Extendee>,
}
impl<Extendee, T: Proxied> ExtensionId<Extendee, T> {
pub const fn number(&self) -> u32 {
self.number
}
}
pub const fn new_extension_id<Extendee, T: Proxied>(
_private: Private,
number: u32,
default: View<'static, T>,
inner: InnerExtensionId,
) -> ExtensionId<Extendee, T> {
ExtensionId { number, inner, default: Some(default), phantom: PhantomData }
}
pub const fn new_repeated_extension_id<Extendee, T: ProxiedInRepeated>(
_private: Private,
number: u32,
inner: InnerExtensionId,
) -> ExtensionId<Extendee, Repeated<T>> {
ExtensionId { number, inner, default: None, phantom: PhantomData }
}
pub const fn new_message_extension_id<Extendee, T: Message>(
_private: Private,
number: u32,
inner: InnerExtensionId,
) -> ExtensionId<Extendee, T> {
ExtensionId { number, inner, default: None, phantom: PhantomData }
}
#[doc(hidden)]
pub trait ExtHas<Msg: Message> {
fn has(&self, _private: Private, msg: impl AsView<Proxied = Msg>) -> bool;
}
#[doc(hidden)]
pub trait ExtClear<Msg: Message> {
fn clear(&self, _private: Private, msg: impl AsMut<MutProxied = Msg>);
}
#[doc(hidden)]
pub trait ExtAccess<Extendee: Message, T: Proxied, Tag> {
fn get<'msg>(
&self,
_private: Private,
msg: impl IntoView<'msg, Proxied = Extendee>,
) -> View<'msg, T>;
fn set(
&self,
_private: Private,
msg: impl AsMut<MutProxied = Extendee>,
value: impl IntoProxied<T>,
);
}
#[doc(hidden)]
pub trait ExtGetMut<Extendee: Message, T: MutProxied, Tag> {
fn get_mut<'msg>(
&self,
_private: Private,
msg: impl IntoMut<'msg, MutProxied = Extendee>,
) -> Mut<'msg, T>;
}
impl<Extendee: Message, T: Proxied + crate::codegen_traits::EntityType> ExtensionId<Extendee, T> {
pub fn has(&self, msg: impl AsView<Proxied = Extendee>) -> bool
where
Self: ExtHas<Extendee>,
{
ExtHas::has(self, Private, msg)
}
pub fn get<'msg>(&self, msg: impl IntoView<'msg, Proxied = Extendee>) -> View<'msg, T>
where
Self: ExtAccess<Extendee, T, <T as crate::codegen_traits::EntityType>::Tag>,
{
ExtAccess::get(self, Private, msg)
}
pub fn clear(&self, mut msg: impl AsMut<MutProxied = Extendee>)
where
Self: ExtClear<Extendee>,
{
ExtClear::clear(self, Private, msg)
}
pub fn set(&self, mut msg: impl AsMut<MutProxied = Extendee>, value: impl IntoProxied<T>)
where
Self: ExtAccess<Extendee, T, <T as crate::codegen_traits::EntityType>::Tag>,
{
ExtAccess::set(self, Private, msg, value)
}
pub fn get_mut<'msg>(&self, msg: impl IntoMut<'msg, MutProxied = Extendee>) -> Mut<'msg, T>
where
T: MutProxied,
Self: ExtGetMut<Extendee, T, <T as crate::codegen_traits::EntityType>::Tag>,
{
ExtGetMut::get_mut(self, Private, msg)
}
}