use super::super::annotations::*;
pub trait AnnotatedStruct {
fn field_annotations(&self, name: &str) -> Option<&Annotations>;
fn field_annotations_mut(&mut self, name: &str) -> Option<&mut Annotations>;
fn struct_annotations(&self) -> Option<&Annotations> {
self.field_annotations("")
}
fn struct_annotations_mut(&mut self) -> Option<&mut Annotations> {
self.field_annotations_mut("")
}
fn field_or_struct_annotations(&self, name: &str) -> Option<&Annotations> {
self.field_annotations(name).or_else(|| self.struct_annotations())
}
fn clone_field_annotations<AnnotatedStructT>(&mut self, name: &str, other: &AnnotatedStructT)
where
AnnotatedStructT: AnnotatedStruct,
{
if let Some(other_annotations) = other.field_annotations(name)
&& let Some(annotations) = self.field_annotations_mut(name)
{
*annotations = other_annotations.clone();
}
}
}