]> git.proxmox.com Git - rustc.git/blame - vendor/chalk-solve/src/clauses/builtin_traits/tuple.rs
Update unsuspicious file list
[rustc.git] / vendor / chalk-solve / src / clauses / builtin_traits / tuple.rs
CommitLineData
487cf647
FG
1use crate::clauses::ClauseBuilder;
2use crate::rust_ir::WellKnownTrait;
3use crate::{Interner, RustIrDatabase, TraitRef};
4use chalk_ir::{Floundered, Substitution, Ty, TyKind};
5
6/// Add implicit impl for the `Tuple` trait for all tuples
7pub fn add_tuple_program_clauses<I: Interner>(
8 db: &dyn RustIrDatabase<I>,
9 builder: &mut ClauseBuilder<'_, I>,
10 self_ty: Ty<I>,
11) -> Result<(), Floundered> {
12 let interner = db.interner();
13
14 match self_ty.kind(interner) {
15 TyKind::Tuple(..) => {
16 let trait_id = db.well_known_trait_id(WellKnownTrait::Tuple).unwrap();
17
18 builder.push_fact(TraitRef {
19 trait_id,
20 substitution: Substitution::from1(interner, self_ty),
21 });
22
23 Ok(())
24 }
25
26 // Tuple trait is non-enumerable
27 TyKind::InferenceVar(..) | TyKind::BoundVar(_) | TyKind::Alias(..) => Err(Floundered),
28 _ => Ok(()),
29 }
30}