// generated by {{generator}} use crate::trap::{TrapId, TrapEntry}; use codeql_extractor::trap; {{#classes}} #[derive(Debug)] pub struct {{name}} { pub id: TrapId, {{#fields}} pub {{field_name}}: {{type}}, {{/fields}} } impl TrapEntry for {{name}} { fn extract_id(&mut self) -> TrapId { std::mem::replace(&mut self.id, TrapId::Star) } fn emit(self, id: trap::Label, out: &mut trap::Writer) { {{#single_field_entries}} out.add_tuple("{{table_name}}", vec![trap::Arg::Label(id){{#fields}}, self.{{field_name}}.into(){{/fields}}]); {{/single_field_entries}} {{#fields}} {{#is_predicate}} if self.{{field_name}} { out.add_tuple("{{table_name}}", vec![trap::Arg::Label(id)]); } {{/is_predicate}} {{#is_optional}} {{^is_repeated}} if let Some(v) = self.{{field_name}} { out.add_tuple("{{table_name}}", vec![trap::Arg::Label(id), v.into()]); } {{/is_repeated}} {{/is_optional}} {{#is_repeated}} for (i, &v) in self.{{field_name}}.iter().enumerate() { {{^is_optional}} out.add_tuple("{{table_name}}", vec![trap::Arg::Label(id){{^is_unordered}}, i.into(){{/is_unordered}}, v.into()]); {{/is_optional}} {{#is_optional}} if let Some(vv) = v { out.add_tuple("{{table_name}}", vec![trap::Arg::Label(id){{^is_unordered}}, i.into(){{/is_unordered}}, v.into()]); } {{/is_optional}} } {{/is_repeated}} {{/fields}} } } {{/classes}}