use super::{FromSyntax, IsInkFn};
use crate::tree::utils;
use crate::{InkArg, InkArgKind, Selector, SelectorArg};
pub trait IsInkCallable: FromSyntax + IsInkFn {
fn payable_arg(&self) -> Option<InkArg> {
utils::ink_arg_by_kind(self.syntax(), InkArgKind::Payable)
}
fn selector_arg(&self) -> Option<SelectorArg> {
utils::ink_arg_by_kind(self.syntax(), InkArgKind::Selector).and_then(SelectorArg::cast)
}
fn default_arg(&self) -> Option<InkArg> {
utils::ink_arg_by_kind(self.syntax(), InkArgKind::Default)
}
fn composed_selector(&self) -> Option<Selector>
where
Self: Sized,
{
Selector::compose(self)
}
}