1#![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}