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