56 lines
1.1 KiB
Rust
56 lines
1.1 KiB
Rust
pub struct LeafStructBuildSpec {
|
|
build: String,
|
|
members: Vec<Box<LeafStructMember>>,
|
|
derive: Vec<String>,
|
|
}
|
|
|
|
impl LeafStructBuildSpec {
|
|
pub fn new(build: &str, members: Vec<Box<LeafStructMember>>, derive: Vec<String>) -> Self {
|
|
Self {
|
|
build: build.to_string(),
|
|
members,
|
|
derive,
|
|
}
|
|
}
|
|
|
|
pub fn build(&self) -> &str {
|
|
&self.build
|
|
}
|
|
|
|
pub fn members(&self) -> impl Iterator<Item = &LeafStructMember> {
|
|
self.members.iter().map(Box::as_ref)
|
|
}
|
|
|
|
pub fn derive(&self) -> impl Iterator<Item = &str> {
|
|
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,
|
|
}
|