52 lines
1.5 KiB
Handlebars
52 lines
1.5 KiB
Handlebars
{{~#if packets}}
|
|
pub enum {{packet_enum_name}} {
|
|
{{~#each packets as |p|}}
|
|
{{p.name}}{{#if p.fields}}({{p.name}}){{/if}}{{#unless @last}},{{/unless}}
|
|
{{~/each}}
|
|
}
|
|
|
|
impl {{packet_enum_name}} {
|
|
pub fn get_type_id(&self) -> u8 {
|
|
match self {
|
|
{{~#each packets as |p|}}
|
|
Self::{{p.name}}{{#if p.fields}}(_){{/if}} => {{packet_id p.id}}{{#unless @last}},{{/unless}}
|
|
{{~/each}}
|
|
}
|
|
}
|
|
|
|
pub fn decode<R: Read>(type_id: u8, reader: &mut R) -> Result<Self, DecodeError> {
|
|
match type_id {
|
|
{{~#each packets as |p|}}
|
|
{{packet_id p.id}} => {
|
|
{{~#if p.fields}}
|
|
let {{snake_case p.name}} = {{p.name}}::decode(reader)?;
|
|
|
|
Ok(Self::{{p.name}}({{snake_case p.name}}))
|
|
{{~/if}}
|
|
{{~#unless p.fields}}
|
|
Ok(Self::{{p.name}})
|
|
{{~/unless}}
|
|
}
|
|
{{~/each}}
|
|
_ => Err(DecodeError::UnknownPacketType { type_id })
|
|
}
|
|
}
|
|
{{#each packets as |p|}}
|
|
pub fn {{snake_case p.name}}({{~#each p.fields as |f|}}{{f.name}}: {{f.type}}{{#unless @last}}, {{/unless}}{{~/each}}) -> Self {
|
|
{{~#if p.fields}}
|
|
let {{snake_case p.name}} = {{p.name}} {
|
|
{{~#each p.fields as |f|}}
|
|
{{f.name}}{{#unless @last}},{{/unless}}
|
|
{{~/each}}
|
|
};
|
|
|
|
Self::{{p.name}}({{snake_case p.name}})
|
|
{{~/if}}
|
|
{{~#unless p.fields}}
|
|
Self::{{p.name}}
|
|
{{~/unless}}
|
|
}
|
|
{{/each~}}
|
|
}
|
|
{{~/if}}
|