in shed/facet/proc_macros/container_impl.rs [303:386]
fn gen_attr_impls(
facet_crate: &Ident,
container_name: &Ident,
members: &ContainerMembers,
) -> Vec<TokenStream> {
let mut output = Vec::new();
let facet_idents = &members.facet_idents;
let facet_types = &members.facet_types;
let delegate_idents = &members.delegate_idents;
let delegate_facets = &members.delegate_facets;
for (facet_ident, facet_type) in facet_idents.iter().zip(facet_types) {
output.push(quote! {
impl ::#facet_crate::FacetRef<#facet_type> for #container_name {
#[inline]
fn facet_ref(&self) -> &(#facet_type)
{
self.#facet_ident.as_ref()
}
}
impl ::#facet_crate::FacetRef<#facet_type> for &#container_name {
#[inline]
fn facet_ref(&self) -> &(#facet_type)
{
(*self).#facet_ident.as_ref()
}
}
impl ::#facet_crate::FacetArc<#facet_type> for #container_name {
#[inline]
fn facet_arc(&self) -> ::std::sync::Arc<#facet_type>
{
self.#facet_ident.clone()
}
}
impl ::#facet_crate::FacetArc<#facet_type> for &#container_name {
#[inline]
fn facet_arc(&self) -> ::std::sync::Arc<#facet_type>
{
(*self).#facet_ident.clone()
}
}
});
}
for (delegate_ident, delegate_facet) in delegate_idents.iter().zip(delegate_facets) {
output.push(quote! {
#(
impl ::#facet_crate::FacetRef<#delegate_facet> for #container_name {
#[inline]
fn facet_ref(&self) -> &(#delegate_facet) {
self.#delegate_ident.facet_ref()
}
}
impl ::#facet_crate::FacetRef<#delegate_facet> for &#container_name {
#[inline]
fn facet_ref(&self) -> &(#delegate_facet) {
self.#delegate_ident.facet_ref()
}
}
impl ::#facet_crate::FacetArc<#delegate_facet> for #container_name {
#[inline]
fn facet_arc(&self) -> ::std::sync::Arc<#delegate_facet> {
self.#delegate_ident.facet_arc()
}
}
impl ::#facet_crate::FacetArc<#delegate_facet> for &#container_name {
#[inline]
fn facet_arc(&self) -> ::std::sync::Arc<#delegate_facet> {
self.#delegate_ident.facet_arc()
}
}
)*
});
}
output
}