MCPcopy Index your code
hub / github.com/SoftbearStudios/bitcode / derive_impl

Method derive_impl

bitcode_derive/src/encode.rs:232–301  ·  view source on GitHub ↗
(
        &self,
        output: [TokenStream; Item::COUNT],
        ident: Ident,
        mut generics: Generics,
    )

Source from the content-addressed store, hash-verified

230 }
231
232 fn derive_impl(
233 &self,
234 output: [TokenStream; Item::COUNT],
235 ident: Ident,
236 mut generics: Generics,
237 ) -> TokenStream {
238 let input_generics = generics.clone();
239 let (impl_generics, input_generics, where_clause) = input_generics.split_for_impl();
240 let input_ty = quote! { #ident #input_generics };
241
242 // Encoder can't contain any lifetimes from input (which would limit reuse of encoder).
243 remove_lifetimes(&mut generics);
244 let (encoder_impl_generics, encoder_generics, encoder_where_clause) =
245 generics.split_for_impl();
246
247 let [type_body, default_body, encode_body, encode_vectored_body, collect_into_body, reserve_body] =
248 output;
249 let encoder_ident = Ident::new(&format!("{ident}Encoder"), Span::call_site());
250 let encoder_ty = quote! { #encoder_ident #encoder_generics };
251 let private = private();
252
253 quote! {
254 const _: () = {
255 impl #impl_generics #private::Encode for #input_ty #where_clause {
256 type Encoder = #encoder_ty;
257 }
258
259 #[allow(non_snake_case)]
260 pub struct #encoder_ident #encoder_impl_generics #encoder_where_clause {
261 #type_body
262 }
263
264 // Avoids bounding #impl_generics: Default.
265 impl #encoder_impl_generics std::default::Default for #encoder_ty #encoder_where_clause {
266 fn default() -> Self {
267 Self {
268 #default_body
269 }
270 }
271 }
272
273 impl #impl_generics #private::Encoder<#input_ty> for #encoder_ty #where_clause {
274 #[cfg_attr(not(debug_assertions), inline(always))]
275 fn encode(&mut self, v: &#input_ty) {
276 #[allow(unused_imports)]
277 use #private::Buffer as _;
278 #encode_body
279 }
280
281 // #[cfg_attr(not(debug_assertions), inline(always))]
282 // #[inline(never)]
283 fn encode_vectored<'__v>(&mut self, i: impl Iterator<Item = &'__v #input_ty> + Clone) where #input_ty: '__v {
284 #[allow(unused_imports)]
285 use #private::Buffer as _;
286 #encode_vectored_body
287 }
288 }
289

Callers 1

deriveMethod · 0.45

Calls 2

remove_lifetimesFunction · 0.85
privateFunction · 0.85

Tested by

no test coverage detected