1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
use super::*; pub trait ClassLike { fn implements<T>(&mut self, ty: T) where T: Into<ClassType>; fn push_annotation<A>(&mut self, annotation: A) where A: Into<AnnotationSpec>; fn push_field<F>(&mut self, field: F) where F: Into<FieldSpec>; fn fields(&self) -> &Vec<FieldSpec>; fn push_constructor<C>(&mut self, constructor: C) where C: Into<ConstructorSpec>; } impl ClassLike for ClassSpec { fn implements<T>(&mut self, ty: T) where T: Into<ClassType>, { self.implements.push(ty.into()); } fn push_annotation<A>(&mut self, annotation: A) where A: Into<AnnotationSpec>, { self.annotations.push(annotation.into()); } fn push_field<F>(&mut self, field: F) where F: Into<FieldSpec>, { self.fields.push(field.into()); } fn fields(&self) -> &Vec<FieldSpec> { &self.fields } fn push_constructor<C>(&mut self, constructor: C) where C: Into<ConstructorSpec>, { self.constructors.push(constructor.into()); } } impl ClassLike for EnumSpec { fn implements<T>(&mut self, ty: T) where T: Into<ClassType>, { self.implements.push(ty.into()); } fn push_annotation<A>(&mut self, annotation: A) where A: Into<AnnotationSpec>, { self.annotations.push(annotation.into()); } fn push_field<F>(&mut self, field: F) where F: Into<FieldSpec>, { self.fields.push(field.into()); } fn fields(&self) -> &Vec<FieldSpec> { &self.fields } fn push_constructor<C>(&mut self, constructor: C) where C: Into<ConstructorSpec>, { self.constructors.push(constructor.into()); } }