#[allow(dead_code, non_snake_case, non_camel_case_types)]
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct {{exception.ident}} {
{{~#each exception.fields as |field|}}
{{#if field.optional ~}}
#[allow(dead_code, non_snake_case)]
pub {{field.ident}}: Option<{{to_rust field.ty}}>,
{{~^~}}
#[allow(dead_code, non_snake_case)]
pub {{field.ident}}: {{to_rust field.ty}},
{{~/if~}}
{{~/each}}
}
impl Display for {{exception.ident}} {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
write!(f, "{:?}", self)
}
}
impl Error for {{exception.ident}} {
fn fn description(&self) -> &str {
"Thrift defined exception"
}
}
impl ::tokio_thrift::protocol::Serialize for {{exception.ident}} {
fn serialize<S>(&self, s: &mut S) -> Result<(), ::tokio_thrift::protocol::Error>
where S: ::tokio_thrift::protocol::Serializer + ::tokio_thrift::protocol::ThriftSerializer
{
s.write_struct_begin("{{exception.ident}}")?;
{{#each exception.fields as |field|~}}
{{#if field.optional}}
if self.{{field.ident}}.is_some() {
s.write_field_begin("{{field.ident}}", {{to_protocol field.ty}}, {{field.seq}})?;
self.{{field.ident}}.unwrap().serialize(s)?;
s.write_field_end()?;
}
{{~^~}}
s.write_field_begin("{{field.ident}}", {{to_protocol field.ty}}, {{field.seq}})?;
self.{{field.ident}}.serialize(s)?;
try!(s.write_field_end());
{{~/if~}}
{{~/each}}
s.write_field_stop()?;
s.write_struct_end()?;
Ok(())
}
}
impl ::tokio_thrift::protocol::Deserialize for {{exception.ident}} {
fn deserialize<D>(de: &mut D) -> Result<Self, ::tokio_thrift::protocol::Error>
where D: ::tokio_thrift::protocol::Deserializer + ::tokio_thrift::protocol::ThriftDeserializer,
{
de.read_struct_begin()?;
{{~#each exception.fields as |field|}}
let mut {{field.ident}} = None;
{{~/each}}
loop {
let scheme_field = de.read_field_begin()?;
if scheme_field.ty == ::tokio_thrift::protocol::ThriftType::Stop {
break;
};
match scheme_field.seq {
{{~#each exception.fields as |field|}}
{{field.seq}} => {
if scheme_field.ty == {{to_protocol field.ty}} {
{{field.ident}} = Some({{expr field.ty}}?);
} else {
// skip
}
},
{{~/each}}
_ => (),// skip
}
de.read_field_end()?;
};
de.read_struct_end()?;
let args = {{exception.ident}} {
{{~#each exception.fields as |field|}}
{{#if field.optional ~}}
{{field.ident}}: {{field.ident}},
{{~^~}}
{{field.ident}}: {{field.ident}}.unwrap(),
{{~/if~}}
{{~/each}}
};
Ok(args)
}
}