pub trait VariableDefinition {
type VariableType: VariableType;
type Directives: ConstDirectives;
type Value: ConstValue;
// Required methods
fn variable(&self) -> &str;
fn type(&self) -> &Self::VariableType;
fn directives(&self) -> Option<&Self::Directives>;
fn default_value(&self) -> Option<&Self::Value>;
// Provided method
fn is_required(&self) -> bool { ... }
}