pub struct LeafStructBuildSpec { build: String, members: Vec>, derive: Vec, } impl LeafStructBuildSpec { pub fn new(build: &str, members: Vec>, derive: Vec) -> Self { Self { build: build.to_string(), members, derive, } } pub fn build(&self) -> &str { &self.build } pub fn members(&self) -> impl Iterator { self.members.iter().map(Box::as_ref) } pub fn derive(&self) -> impl Iterator { self.derive.iter().map(String::as_str) } } pub struct LeafStructMember { name: String, kind: LeafStructMemberKind, } impl LeafStructMember { pub fn new(name: &str, kind: LeafStructMemberKind) -> Self { Self { name: name.to_string(), kind, } } pub fn name(&self) -> &str { &self.name } pub fn kind(&self) -> &LeafStructMemberKind { &self.kind } } pub enum LeafStructMemberKind { String, FileId, Range, }