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
use codegen::*; use internal::*; use templating::*; use amq_protocol_types::*; use serde_json::{self, Value}; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQProtocolDefinition { pub name: String, pub major_version: u8, pub minor_version: u8, pub revision: u8, pub port: u32, pub copyright: Vec<String>, pub domains: Vec<AMQPDomain>, pub constants: Vec<AMQPConstant>, pub classes: Vec<AMQPClass>, } impl AMQProtocolDefinition { pub fn load() -> AMQProtocolDefinition { let specs = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/specs/amqp-rabbitmq-0.9.1.json")); serde_json::from_str::<_AMQProtocolDefinition>(specs).expect("Failed to parse AMQP specs file").to_specs() } pub fn code_generator(self, templates: AMQPTemplates) -> CodeGenerator { CodeGenerator::new(self, templates) } pub fn simple_code_generator(self, template: String) -> CodeGenerator { self.code_generator(AMQPTemplates { main: template, ..Default::default() }) } } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPDomain { pub name: String, #[serde(rename="type")] pub amqp_type: AMQPType, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPConstant { pub name: String, pub value: u16, #[serde(rename="class")] pub klass: Option<String>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPClass { pub id: u8, pub methods: Vec<AMQPMethod>, pub name: String, pub properties: Option<Vec<AMQPProperty>>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPMethod { pub id: u8, pub arguments: Vec<AMQPArgument>, pub name: String, pub synchronous: Option<bool>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPArgument { #[serde(rename="type")] pub amqp_type: Option<AMQPType>, pub name: String, pub default_value: Option<Value>, pub domain: Option<String>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AMQPProperty { #[serde(rename="type")] pub amqp_type: AMQPType, pub name: String, }