mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
55 lines
1.6 KiB
Plaintext
55 lines
1.6 KiB
Plaintext
// generated by {{generator}}
|
|
|
|
#![cfg_attr(any(), rustfmt::skip)]
|
|
|
|
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}}.into_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(v) = 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}}
|