pub trait AstToken {
// Required methods
fn can_cast(token: Token) -> bool
where Self: Sized;
fn cast(syntax: SyntaxToken) -> Option<Self>
where Self: Sized;
fn expect(syntax: SyntaxToken) -> Self
where Self: Sized;
fn syntax(&self) -> &SyntaxToken;
// Provided method
fn text(&self) -> &str { ... }
}