pub use self::object_safety::ObjectSafetyViolation;
pub use self::object_safety::MethodViolationCode;
pub use self::select::{EvaluationCache, SelectionContext, SelectionCache};
-pub use self::select::{MethodMatchResult, MethodMatched, MethodAmbiguous, MethodDidNotMatch};
-pub use self::select::{MethodMatchedData}; // intentionally don't export variants
pub use self::specialize::{OverlapError, specialization_graph, specializes, translate_substs};
pub use self::specialize::{SpecializesCache, find_associated_item};
pub use self::util::elaborate_predicates;
//! See `README.md` for high-level documentation
-pub use self::MethodMatchResult::*;
-pub use self::MethodMatchedData::*;
use self::SelectionCandidate::*;
use self::EvaluationResult::*;
SelectionResult<'tcx, SelectionCandidate<'tcx>>>>,
}
-pub enum MethodMatchResult {
- MethodMatched(MethodMatchedData),
- MethodAmbiguous(/* list of impls that could apply */ Vec<DefId>),
- MethodDidNotMatch,
-}
-
-#[derive(Copy, Clone, Debug)]
-pub enum MethodMatchedData {
- // In the case of a precise match, we don't really need to store
- // how the match was found. So don't.
- PreciseMethodMatch,
-
- // In the case of a coercion, we need to know the precise impl so
- // that we can determine the type to which things were coerced.
- CoerciveMethodMatch(/* impl we matched */ DefId)
-}
-
/// The selection process begins by considering all impls, where
/// clauses, and so forth that might resolve an obligation. Sometimes
/// we'll be able to say definitively that (e.g.) an impl does not
}
}
}
-
-impl MethodMatchResult {
- pub fn may_apply(&self) -> bool {
- match *self {
- MethodMatched(_) => true,
- MethodAmbiguous(_) => true,
- MethodDidNotMatch => false,
- }
- }
-}