use super::{Accessor, Name, Param, Type};
use crate::words::{field, init, set, value};
pub fn accessor_scope(ty: &Type, a: &Accessor, property: bool) -> Vec<Param> {
let writes = [set::WORD.text, init::WORD.text].contains(&a.name.text.as_str());
let mut names = Vec::new();
if writes {
names.push(named(value::WORD.text, ty, &a.name));
}
if property {
names.push(named(field::WORD.text, ty, &a.name));
}
names
}
pub fn value_param(ty: &Type, at: &Name) -> Param {
named(value::WORD.text, ty, at)
}
fn named(text: &str, ty: &Type, at: &Name) -> Param {
Param {
pass: None,
lifetime: None,
ty: ty.clone(),
name: Name {
text: text.to_string(),
span: at.span,
},
default: None,
}
}