1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use sway_types::Span;
use crate::parse_tree::CallPath;
use crate::{Ident, TypeInfo};
#[derive(Debug, Clone)]
pub enum MethodName {
/// Represents a method lookup with a type somewhere in the path
/// like a::b::~C::d()
FromType {
call_path: CallPath<(TypeInfo, Span)>,
method_name: Ident,
},
/// Represents a method lookup that does not contain any types in the path
/// something like a.b(c)
/// in this case, the first argument defines where to look for the method
FromModule { method_name: Ident },
/// something like a::b::c()
/// in this case, the path defines where the fn symbol is defined
/// used for things like core::ops::add(a, b).
/// in this case, the first argument determines the type to look for
FromTrait { call_path: CallPath },
}
impl MethodName {
/// To be used for error messages and debug strings
pub fn easy_name(&self) -> Ident {
match self {
MethodName::FromType { method_name, .. } => method_name.clone(),
MethodName::FromTrait { call_path, .. } => call_path.suffix.clone(),
MethodName::FromModule { method_name, .. } => method_name.clone(),
}
}
}