Skip to main content

charon_driver/translate/
translate_from_rustc.rs

1// This file is automatically generated by `cargo run --bin generate-asts`.
2// Do not edit it by hand.
3
4#![allow(
5    clippy::deref_addrof,
6    clippy::large_enum_variant,
7    clippy::needless_borrow,
8    clippy::needless_question_mark,
9    unreachable_patterns
10)]
11
12use super::translate_ctx::TranslateCtx;
13use charon_lib::ast::from_rustc::{self, FromRustcError};
14use rustc_ast::attr::version::*;
15use rustc_hir::attrs::*;
16use rustc_hir::lang_items::*;
17use rustc_span::symbol::*;
18
19impl<'tcx> TranslateCtx<'tcx> {
20    pub(crate) fn translate_rustc_attribute_kind(
21        &mut self,
22        value: &AttributeKind,
23    ) -> Result<from_rustc::AttributeKind, FromRustcError> {
24        self.translate_attribute_kind_from_rustc(value)
25    }
26
27    pub(crate) fn translate_rustc_lang_item(
28        &mut self,
29        value: &LangItem,
30    ) -> Result<from_rustc::LangItem, FromRustcError> {
31        self.translate_lang_item_from_rustc(value)
32    }
33
34    fn translate_attribute_kind_from_rustc(
35        &mut self,
36        value: &AttributeKind,
37    ) -> Result<from_rustc::AttributeKind, FromRustcError> {
38        match value {
39            AttributeKind::AutomaticallyDerived => {
40                Ok(from_rustc::AttributeKind::AutomaticallyDerived)
41            }
42            AttributeKind::Cold => Ok(from_rustc::AttributeKind::Cold),
43            AttributeKind::Deprecated { deprecation, span } => {
44                Ok(from_rustc::AttributeKind::Deprecated {
45                    deprecation: self.translate_deprecation_from_rustc(deprecation)?,
46                    span: self.translate_span(span),
47                })
48            }
49            AttributeKind::Fundamental => Ok(from_rustc::AttributeKind::Fundamental),
50            AttributeKind::Ignore { span, reason } => Ok(from_rustc::AttributeKind::Ignore {
51                span: self.translate_span(span),
52                reason: (reason)
53                    .as_ref()
54                    .map(|value| Ok((value).to_string().into()))
55                    .transpose()?,
56            }),
57            AttributeKind::Inline(field_0, field_1) => Ok(from_rustc::AttributeKind::Inline(
58                self.translate_inline_attr_from_rustc(field_0)?,
59                self.translate_span(field_1),
60            )),
61            AttributeKind::MayDangle(field_0) => Ok(from_rustc::AttributeKind::MayDangle(
62                self.translate_span(field_0),
63            )),
64            AttributeKind::Naked(field_0) => Ok(from_rustc::AttributeKind::Naked(
65                self.translate_span(field_0),
66            )),
67            AttributeKind::NoLink => Ok(from_rustc::AttributeKind::NoLink),
68            AttributeKind::NoMangle(field_0) => Ok(from_rustc::AttributeKind::NoMangle(
69                self.translate_span(field_0),
70            )),
71            AttributeKind::NonExhaustive(field_0) => Ok(from_rustc::AttributeKind::NonExhaustive(
72                self.translate_span(field_0),
73            )),
74            AttributeKind::Optimize(field_0, field_1) => Ok(from_rustc::AttributeKind::Optimize(
75                self.translate_optimize_attr_from_rustc(field_0)?,
76                self.translate_span(field_1),
77            )),
78            AttributeKind::RustcAlign { align, span } => {
79                Ok(from_rustc::AttributeKind::RustcAlign {
80                    align: align.bytes(),
81                    span: self.translate_span(span),
82                })
83            }
84            AttributeKind::RustcDiagnosticItem(field_0) => Ok(
85                from_rustc::AttributeKind::RustcDiagnosticItem((field_0).to_string().into()),
86            ),
87            AttributeKind::RustcIntrinsic => Ok(from_rustc::AttributeKind::RustcIntrinsic),
88            AttributeKind::ShouldPanic { reason } => Ok(from_rustc::AttributeKind::ShouldPanic {
89                reason: (reason)
90                    .as_ref()
91                    .map(|value| Ok((value).to_string().into()))
92                    .transpose()?,
93            }),
94            AttributeKind::TargetFeature {
95                features,
96                attr_span,
97                was_forced,
98            } => Ok(from_rustc::AttributeKind::TargetFeature {
99                features: (features)
100                    .iter()
101                    .map(|value| {
102                        Ok((
103                            (&((value).0)).to_string().into(),
104                            self.translate_span(&((value).1)),
105                        ))
106                    })
107                    .collect::<Result<Vec<_>, FromRustcError>>()?,
108                attr_span: self.translate_span(attr_span),
109                was_forced: *(was_forced),
110            }),
111            AttributeKind::TrackCaller(field_0) => Ok(from_rustc::AttributeKind::TrackCaller(
112                self.translate_span(field_0),
113            )),
114            _ => Err(FromRustcError),
115        }
116    }
117
118    fn translate_lang_item_from_rustc(
119        &mut self,
120        value: &LangItem,
121    ) -> Result<from_rustc::LangItem, FromRustcError> {
122        match value {
123            LangItem::Sized => Ok(from_rustc::LangItem::Sized),
124            LangItem::MetaSized => Ok(from_rustc::LangItem::MetaSized),
125            LangItem::PointeeSized => Ok(from_rustc::LangItem::PointeeSized),
126            LangItem::Unsize => Ok(from_rustc::LangItem::Unsize),
127            LangItem::AlignOf => Ok(from_rustc::LangItem::AlignOf),
128            LangItem::SizeOf => Ok(from_rustc::LangItem::SizeOf),
129            LangItem::OffsetOf => Ok(from_rustc::LangItem::OffsetOf),
130            LangItem::StructuralPeq => Ok(from_rustc::LangItem::StructuralPeq),
131            LangItem::Copy => Ok(from_rustc::LangItem::Copy),
132            LangItem::Clone => Ok(from_rustc::LangItem::Clone),
133            LangItem::CloneFn => Ok(from_rustc::LangItem::CloneFn),
134            LangItem::UseCloned => Ok(from_rustc::LangItem::UseCloned),
135            LangItem::TrivialClone => Ok(from_rustc::LangItem::TrivialClone),
136            LangItem::Sync => Ok(from_rustc::LangItem::Sync),
137            LangItem::DiscriminantKind => Ok(from_rustc::LangItem::DiscriminantKind),
138            LangItem::Discriminant => Ok(from_rustc::LangItem::Discriminant),
139            LangItem::PointeeTrait => Ok(from_rustc::LangItem::PointeeTrait),
140            LangItem::Metadata => Ok(from_rustc::LangItem::Metadata),
141            LangItem::DynMetadata => Ok(from_rustc::LangItem::DynMetadata),
142            LangItem::Freeze => Ok(from_rustc::LangItem::Freeze),
143            LangItem::UnsafeUnpin => Ok(from_rustc::LangItem::UnsafeUnpin),
144            LangItem::FnPtrTrait => Ok(from_rustc::LangItem::FnPtrTrait),
145            LangItem::FnPtrAddr => Ok(from_rustc::LangItem::FnPtrAddr),
146            LangItem::Drop => Ok(from_rustc::LangItem::Drop),
147            LangItem::Destruct => Ok(from_rustc::LangItem::Destruct),
148            LangItem::AsyncDrop => Ok(from_rustc::LangItem::AsyncDrop),
149            LangItem::AsyncDropInPlace => Ok(from_rustc::LangItem::AsyncDropInPlace),
150            LangItem::CoerceUnsized => Ok(from_rustc::LangItem::CoerceUnsized),
151            LangItem::DispatchFromDyn => Ok(from_rustc::LangItem::DispatchFromDyn),
152            LangItem::TransmuteOpts => Ok(from_rustc::LangItem::TransmuteOpts),
153            LangItem::TransmuteTrait => Ok(from_rustc::LangItem::TransmuteTrait),
154            LangItem::Add => Ok(from_rustc::LangItem::Add),
155            LangItem::Sub => Ok(from_rustc::LangItem::Sub),
156            LangItem::Mul => Ok(from_rustc::LangItem::Mul),
157            LangItem::Div => Ok(from_rustc::LangItem::Div),
158            LangItem::Rem => Ok(from_rustc::LangItem::Rem),
159            LangItem::Neg => Ok(from_rustc::LangItem::Neg),
160            LangItem::Not => Ok(from_rustc::LangItem::Not),
161            LangItem::BitXor => Ok(from_rustc::LangItem::BitXor),
162            LangItem::BitAnd => Ok(from_rustc::LangItem::BitAnd),
163            LangItem::BitOr => Ok(from_rustc::LangItem::BitOr),
164            LangItem::Shl => Ok(from_rustc::LangItem::Shl),
165            LangItem::Shr => Ok(from_rustc::LangItem::Shr),
166            LangItem::AddAssign => Ok(from_rustc::LangItem::AddAssign),
167            LangItem::SubAssign => Ok(from_rustc::LangItem::SubAssign),
168            LangItem::MulAssign => Ok(from_rustc::LangItem::MulAssign),
169            LangItem::DivAssign => Ok(from_rustc::LangItem::DivAssign),
170            LangItem::RemAssign => Ok(from_rustc::LangItem::RemAssign),
171            LangItem::BitXorAssign => Ok(from_rustc::LangItem::BitXorAssign),
172            LangItem::BitAndAssign => Ok(from_rustc::LangItem::BitAndAssign),
173            LangItem::BitOrAssign => Ok(from_rustc::LangItem::BitOrAssign),
174            LangItem::ShlAssign => Ok(from_rustc::LangItem::ShlAssign),
175            LangItem::ShrAssign => Ok(from_rustc::LangItem::ShrAssign),
176            LangItem::Index => Ok(from_rustc::LangItem::Index),
177            LangItem::IndexMut => Ok(from_rustc::LangItem::IndexMut),
178            LangItem::UnsafeCell => Ok(from_rustc::LangItem::UnsafeCell),
179            LangItem::UnsafePinned => Ok(from_rustc::LangItem::UnsafePinned),
180            LangItem::VaArgSafe => Ok(from_rustc::LangItem::VaArgSafe),
181            LangItem::VaList => Ok(from_rustc::LangItem::VaList),
182            LangItem::Deref => Ok(from_rustc::LangItem::Deref),
183            LangItem::DerefMut => Ok(from_rustc::LangItem::DerefMut),
184            LangItem::DerefPure => Ok(from_rustc::LangItem::DerefPure),
185            LangItem::DerefTarget => Ok(from_rustc::LangItem::DerefTarget),
186            LangItem::Receiver => Ok(from_rustc::LangItem::Receiver),
187            LangItem::ReceiverTarget => Ok(from_rustc::LangItem::ReceiverTarget),
188            LangItem::LegacyReceiver => Ok(from_rustc::LangItem::LegacyReceiver),
189            LangItem::Fn => Ok(from_rustc::LangItem::Fn),
190            LangItem::FnMut => Ok(from_rustc::LangItem::FnMut),
191            LangItem::FnOnce => Ok(from_rustc::LangItem::FnOnce),
192            LangItem::AsyncFn => Ok(from_rustc::LangItem::AsyncFn),
193            LangItem::AsyncFnMut => Ok(from_rustc::LangItem::AsyncFnMut),
194            LangItem::AsyncFnOnce => Ok(from_rustc::LangItem::AsyncFnOnce),
195            LangItem::AsyncFnOnceOutput => Ok(from_rustc::LangItem::AsyncFnOnceOutput),
196            LangItem::CallOnceFuture => Ok(from_rustc::LangItem::CallOnceFuture),
197            LangItem::CallRefFuture => Ok(from_rustc::LangItem::CallRefFuture),
198            LangItem::AsyncFnKindHelper => Ok(from_rustc::LangItem::AsyncFnKindHelper),
199            LangItem::AsyncFnKindUpvars => Ok(from_rustc::LangItem::AsyncFnKindUpvars),
200            LangItem::FnOnceOutput => Ok(from_rustc::LangItem::FnOnceOutput),
201            LangItem::Iterator => Ok(from_rustc::LangItem::Iterator),
202            LangItem::FusedIterator => Ok(from_rustc::LangItem::FusedIterator),
203            LangItem::Future => Ok(from_rustc::LangItem::Future),
204            LangItem::FutureOutput => Ok(from_rustc::LangItem::FutureOutput),
205            LangItem::AsyncIterator => Ok(from_rustc::LangItem::AsyncIterator),
206            LangItem::CoroutineState => Ok(from_rustc::LangItem::CoroutineState),
207            LangItem::Coroutine => Ok(from_rustc::LangItem::Coroutine),
208            LangItem::CoroutineReturn => Ok(from_rustc::LangItem::CoroutineReturn),
209            LangItem::CoroutineYield => Ok(from_rustc::LangItem::CoroutineYield),
210            LangItem::CoroutineResume => Ok(from_rustc::LangItem::CoroutineResume),
211            LangItem::Unpin => Ok(from_rustc::LangItem::Unpin),
212            LangItem::Pin => Ok(from_rustc::LangItem::Pin),
213            LangItem::OrderingEnum => Ok(from_rustc::LangItem::OrderingEnum),
214            LangItem::PartialEq => Ok(from_rustc::LangItem::PartialEq),
215            LangItem::PartialOrd => Ok(from_rustc::LangItem::PartialOrd),
216            LangItem::CVoid => Ok(from_rustc::LangItem::CVoid),
217            LangItem::Type => Ok(from_rustc::LangItem::Type),
218            LangItem::TypeId => Ok(from_rustc::LangItem::TypeId),
219            LangItem::Panic => Ok(from_rustc::LangItem::Panic),
220            LangItem::PanicNounwind => Ok(from_rustc::LangItem::PanicNounwind),
221            LangItem::PanicFmt => Ok(from_rustc::LangItem::PanicFmt),
222            LangItem::PanicDisplay => Ok(from_rustc::LangItem::PanicDisplay),
223            LangItem::ConstPanicFmt => Ok(from_rustc::LangItem::ConstPanicFmt),
224            LangItem::PanicBoundsCheck => Ok(from_rustc::LangItem::PanicBoundsCheck),
225            LangItem::PanicMisalignedPointerDereference => {
226                Ok(from_rustc::LangItem::PanicMisalignedPointerDereference)
227            }
228            LangItem::PanicInfo => Ok(from_rustc::LangItem::PanicInfo),
229            LangItem::PanicLocation => Ok(from_rustc::LangItem::PanicLocation),
230            LangItem::PanicImpl => Ok(from_rustc::LangItem::PanicImpl),
231            LangItem::PanicCannotUnwind => Ok(from_rustc::LangItem::PanicCannotUnwind),
232            LangItem::PanicInCleanup => Ok(from_rustc::LangItem::PanicInCleanup),
233            LangItem::PanicAddOverflow => Ok(from_rustc::LangItem::PanicAddOverflow),
234            LangItem::PanicSubOverflow => Ok(from_rustc::LangItem::PanicSubOverflow),
235            LangItem::PanicMulOverflow => Ok(from_rustc::LangItem::PanicMulOverflow),
236            LangItem::PanicDivOverflow => Ok(from_rustc::LangItem::PanicDivOverflow),
237            LangItem::PanicRemOverflow => Ok(from_rustc::LangItem::PanicRemOverflow),
238            LangItem::PanicNegOverflow => Ok(from_rustc::LangItem::PanicNegOverflow),
239            LangItem::PanicShrOverflow => Ok(from_rustc::LangItem::PanicShrOverflow),
240            LangItem::PanicShlOverflow => Ok(from_rustc::LangItem::PanicShlOverflow),
241            LangItem::PanicDivZero => Ok(from_rustc::LangItem::PanicDivZero),
242            LangItem::PanicRemZero => Ok(from_rustc::LangItem::PanicRemZero),
243            LangItem::PanicCoroutineResumed => Ok(from_rustc::LangItem::PanicCoroutineResumed),
244            LangItem::PanicAsyncFnResumed => Ok(from_rustc::LangItem::PanicAsyncFnResumed),
245            LangItem::PanicAsyncGenFnResumed => Ok(from_rustc::LangItem::PanicAsyncGenFnResumed),
246            LangItem::PanicGenFnNone => Ok(from_rustc::LangItem::PanicGenFnNone),
247            LangItem::PanicCoroutineResumedPanic => {
248                Ok(from_rustc::LangItem::PanicCoroutineResumedPanic)
249            }
250            LangItem::PanicAsyncFnResumedPanic => {
251                Ok(from_rustc::LangItem::PanicAsyncFnResumedPanic)
252            }
253            LangItem::PanicAsyncGenFnResumedPanic => {
254                Ok(from_rustc::LangItem::PanicAsyncGenFnResumedPanic)
255            }
256            LangItem::PanicGenFnNonePanic => Ok(from_rustc::LangItem::PanicGenFnNonePanic),
257            LangItem::PanicNullPointerDereference => {
258                Ok(from_rustc::LangItem::PanicNullPointerDereference)
259            }
260            LangItem::PanicInvalidEnumConstruction => {
261                Ok(from_rustc::LangItem::PanicInvalidEnumConstruction)
262            }
263            LangItem::PanicCoroutineResumedDrop => {
264                Ok(from_rustc::LangItem::PanicCoroutineResumedDrop)
265            }
266            LangItem::PanicAsyncFnResumedDrop => Ok(from_rustc::LangItem::PanicAsyncFnResumedDrop),
267            LangItem::PanicAsyncGenFnResumedDrop => {
268                Ok(from_rustc::LangItem::PanicAsyncGenFnResumedDrop)
269            }
270            LangItem::PanicGenFnNoneDrop => Ok(from_rustc::LangItem::PanicGenFnNoneDrop),
271            LangItem::BeginPanic => Ok(from_rustc::LangItem::BeginPanic),
272            LangItem::FormatArgument => Ok(from_rustc::LangItem::FormatArgument),
273            LangItem::FormatArguments => Ok(from_rustc::LangItem::FormatArguments),
274            LangItem::DropGlue => Ok(from_rustc::LangItem::DropGlue),
275            LangItem::AllocLayout => Ok(from_rustc::LangItem::AllocLayout),
276            LangItem::Start => Ok(from_rustc::LangItem::Start),
277            LangItem::EhPersonality => Ok(from_rustc::LangItem::EhPersonality),
278            LangItem::EhCatchTypeinfo => Ok(from_rustc::LangItem::EhCatchTypeinfo),
279            LangItem::CompilerMove => Ok(from_rustc::LangItem::CompilerMove),
280            LangItem::CompilerCopy => Ok(from_rustc::LangItem::CompilerCopy),
281            LangItem::OwnedBox => Ok(from_rustc::LangItem::OwnedBox),
282            LangItem::GlobalAlloc => Ok(from_rustc::LangItem::GlobalAlloc),
283            LangItem::PhantomData => Ok(from_rustc::LangItem::PhantomData),
284            LangItem::ManuallyDrop => Ok(from_rustc::LangItem::ManuallyDrop),
285            LangItem::MaybeDangling => Ok(from_rustc::LangItem::MaybeDangling),
286            LangItem::BikeshedGuaranteedNoDrop => {
287                Ok(from_rustc::LangItem::BikeshedGuaranteedNoDrop)
288            }
289            LangItem::MaybeUninit => Ok(from_rustc::LangItem::MaybeUninit),
290            LangItem::Termination => Ok(from_rustc::LangItem::Termination),
291            LangItem::Try => Ok(from_rustc::LangItem::Try),
292            LangItem::Tuple => Ok(from_rustc::LangItem::Tuple),
293            LangItem::SliceLen => Ok(from_rustc::LangItem::SliceLen),
294            LangItem::TryTraitFromResidual => Ok(from_rustc::LangItem::TryTraitFromResidual),
295            LangItem::TryTraitFromOutput => Ok(from_rustc::LangItem::TryTraitFromOutput),
296            LangItem::TryTraitBranch => Ok(from_rustc::LangItem::TryTraitBranch),
297            LangItem::TryTraitFromYeet => Ok(from_rustc::LangItem::TryTraitFromYeet),
298            LangItem::ResidualIntoTryType => Ok(from_rustc::LangItem::ResidualIntoTryType),
299            LangItem::CoercePointeeValidated => Ok(from_rustc::LangItem::CoercePointeeValidated),
300            LangItem::ConstParamTy => Ok(from_rustc::LangItem::ConstParamTy),
301            LangItem::Poll => Ok(from_rustc::LangItem::Poll),
302            LangItem::PollReady => Ok(from_rustc::LangItem::PollReady),
303            LangItem::PollPending => Ok(from_rustc::LangItem::PollPending),
304            LangItem::AsyncGenReady => Ok(from_rustc::LangItem::AsyncGenReady),
305            LangItem::AsyncGenPending => Ok(from_rustc::LangItem::AsyncGenPending),
306            LangItem::AsyncGenFinished => Ok(from_rustc::LangItem::AsyncGenFinished),
307            LangItem::ResumeTy => Ok(from_rustc::LangItem::ResumeTy),
308            LangItem::GetContext => Ok(from_rustc::LangItem::GetContext),
309            LangItem::Context => Ok(from_rustc::LangItem::Context),
310            LangItem::FuturePoll => Ok(from_rustc::LangItem::FuturePoll),
311            LangItem::AsyncIteratorPollNext => Ok(from_rustc::LangItem::AsyncIteratorPollNext),
312            LangItem::IntoAsyncIterIntoIter => Ok(from_rustc::LangItem::IntoAsyncIterIntoIter),
313            LangItem::Option => Ok(from_rustc::LangItem::Option),
314            LangItem::OptionSome => Ok(from_rustc::LangItem::OptionSome),
315            LangItem::OptionNone => Ok(from_rustc::LangItem::OptionNone),
316            LangItem::ResultOk => Ok(from_rustc::LangItem::ResultOk),
317            LangItem::ResultErr => Ok(from_rustc::LangItem::ResultErr),
318            LangItem::ControlFlowContinue => Ok(from_rustc::LangItem::ControlFlowContinue),
319            LangItem::ControlFlowBreak => Ok(from_rustc::LangItem::ControlFlowBreak),
320            LangItem::IntoFutureIntoFuture => Ok(from_rustc::LangItem::IntoFutureIntoFuture),
321            LangItem::IntoIterIntoIter => Ok(from_rustc::LangItem::IntoIterIntoIter),
322            LangItem::IteratorNext => Ok(from_rustc::LangItem::IteratorNext),
323            LangItem::PinNewUnchecked => Ok(from_rustc::LangItem::PinNewUnchecked),
324            LangItem::RangeFrom => Ok(from_rustc::LangItem::RangeFrom),
325            LangItem::RangeFull => Ok(from_rustc::LangItem::RangeFull),
326            LangItem::RangeInclusiveStruct => Ok(from_rustc::LangItem::RangeInclusiveStruct),
327            LangItem::RangeInclusiveNew => Ok(from_rustc::LangItem::RangeInclusiveNew),
328            LangItem::Range => Ok(from_rustc::LangItem::Range),
329            LangItem::RangeToInclusive => Ok(from_rustc::LangItem::RangeToInclusive),
330            LangItem::RangeTo => Ok(from_rustc::LangItem::RangeTo),
331            LangItem::RangeMax => Ok(from_rustc::LangItem::RangeMax),
332            LangItem::RangeMin => Ok(from_rustc::LangItem::RangeMin),
333            LangItem::RangeSub => Ok(from_rustc::LangItem::RangeSub),
334            LangItem::RangeFromCopy => Ok(from_rustc::LangItem::RangeFromCopy),
335            LangItem::RangeCopy => Ok(from_rustc::LangItem::RangeCopy),
336            LangItem::RangeInclusiveCopy => Ok(from_rustc::LangItem::RangeInclusiveCopy),
337            LangItem::RangeToInclusiveCopy => Ok(from_rustc::LangItem::RangeToInclusiveCopy),
338            LangItem::String => Ok(from_rustc::LangItem::String),
339            LangItem::CStr => Ok(from_rustc::LangItem::CStr),
340            LangItem::ContractBuildCheckEnsures => {
341                Ok(from_rustc::LangItem::ContractBuildCheckEnsures)
342            }
343            LangItem::ContractCheckRequires => Ok(from_rustc::LangItem::ContractCheckRequires),
344            LangItem::DefaultTrait4 => Ok(from_rustc::LangItem::DefaultTrait4),
345            LangItem::DefaultTrait3 => Ok(from_rustc::LangItem::DefaultTrait3),
346            LangItem::DefaultTrait2 => Ok(from_rustc::LangItem::DefaultTrait2),
347            LangItem::DefaultTrait1 => Ok(from_rustc::LangItem::DefaultTrait1),
348            LangItem::ContractCheckEnsures => Ok(from_rustc::LangItem::ContractCheckEnsures),
349            LangItem::Reborrow => Ok(from_rustc::LangItem::Reborrow),
350            LangItem::CoerceShared => Ok(from_rustc::LangItem::CoerceShared),
351            LangItem::FieldRepresentingType => Ok(from_rustc::LangItem::FieldRepresentingType),
352            LangItem::Field => Ok(from_rustc::LangItem::Field),
353            LangItem::FieldBase => Ok(from_rustc::LangItem::FieldBase),
354            LangItem::FieldType => Ok(from_rustc::LangItem::FieldType),
355            LangItem::FieldOffset => Ok(from_rustc::LangItem::FieldOffset),
356            LangItem::From => Ok(from_rustc::LangItem::From),
357        }
358    }
359
360    fn translate_deprecation_from_rustc(
361        &mut self,
362        value: &Deprecation,
363    ) -> Result<from_rustc::Deprecation, FromRustcError> {
364        Ok(from_rustc::Deprecation {
365            since: self.translate_deprecated_since_from_rustc(&value.since)?,
366            note: (&value.note)
367                .as_ref()
368                .map(|value| Ok(self.translate_ident_from_rustc(value)?))
369                .transpose()?,
370            suggestion: (&value.suggestion)
371                .as_ref()
372                .map(|value| Ok((value).to_string().into()))
373                .transpose()?,
374        })
375    }
376
377    fn translate_inline_attr_from_rustc(
378        &mut self,
379        value: &InlineAttr,
380    ) -> Result<from_rustc::InlineAttr, FromRustcError> {
381        match value {
382            InlineAttr::None => Ok(from_rustc::InlineAttr::None),
383            InlineAttr::Hint => Ok(from_rustc::InlineAttr::Hint),
384            InlineAttr::Always => Ok(from_rustc::InlineAttr::Always),
385            InlineAttr::Never => Ok(from_rustc::InlineAttr::Never),
386            InlineAttr::Force { attr_span, reason } => Ok(from_rustc::InlineAttr::Force {
387                attr_span: self.translate_span(attr_span),
388                reason: (reason)
389                    .as_ref()
390                    .map(|value| Ok((value).to_string().into()))
391                    .transpose()?,
392            }),
393        }
394    }
395
396    fn translate_optimize_attr_from_rustc(
397        &mut self,
398        value: &OptimizeAttr,
399    ) -> Result<from_rustc::OptimizeAttr, FromRustcError> {
400        match value {
401            OptimizeAttr::Default => Ok(from_rustc::OptimizeAttr::Default),
402            OptimizeAttr::DoNotOptimize => Ok(from_rustc::OptimizeAttr::DoNotOptimize),
403            OptimizeAttr::Speed => Ok(from_rustc::OptimizeAttr::Speed),
404            OptimizeAttr::Size => Ok(from_rustc::OptimizeAttr::Size),
405        }
406    }
407
408    fn translate_deprecated_since_from_rustc(
409        &mut self,
410        value: &DeprecatedSince,
411    ) -> Result<from_rustc::DeprecatedSince, FromRustcError> {
412        match value {
413            DeprecatedSince::RustcVersion(field_0) => {
414                Ok(from_rustc::DeprecatedSince::RustcVersion(
415                    self.translate_rustc_version_from_rustc(field_0)?,
416                ))
417            }
418            DeprecatedSince::Future => Ok(from_rustc::DeprecatedSince::Future),
419            DeprecatedSince::NonStandard(field_0) => Ok(from_rustc::DeprecatedSince::NonStandard(
420                (field_0).to_string().into(),
421            )),
422            DeprecatedSince::Unspecified => Ok(from_rustc::DeprecatedSince::Unspecified),
423            DeprecatedSince::Err => Ok(from_rustc::DeprecatedSince::Err),
424        }
425    }
426
427    fn translate_ident_from_rustc(
428        &mut self,
429        value: &Ident,
430    ) -> Result<from_rustc::Ident, FromRustcError> {
431        Ok(from_rustc::Ident {
432            name: (&value.name).to_string().into(),
433            span: self.translate_span(&value.span),
434        })
435    }
436
437    fn translate_rustc_version_from_rustc(
438        &mut self,
439        value: &RustcVersion,
440    ) -> Result<from_rustc::RustcVersion, FromRustcError> {
441        Ok(from_rustc::RustcVersion {
442            major: *(&value.major),
443            minor: *(&value.minor),
444            patch: *(&value.patch),
445        })
446    }
447}