<br><div>Hi,</div><div><br></div><div>I'm working on a router of sorts. I'd like to have a config file which specifies how to classify messages, what channels are available, and routing rules based on classifications and channels.</div>
<div><br></div><div>When my application starts, I'd like to transform the configuration into a module (let's call it 'router') so I can do someting like 'router:route(Message)'. Message will be a record that encapsulates a bunch of things about the message, and the returned value will be the channel to which the message should be delivered. The Message record is reasonably complicated - the top level thing contains several layers of different records. I also have a large number of macros that I use to extract different fields/subrecords of a top-level Message.</div>
<div><br></div><div>When I started looking at how to do this, I quickly found erl_scan, erl_parse, and friends. I can easily create a module on the fly with these, but everything falls apart when I need to get at the Message record and macro definitions. Despite the access provided to compiler-ish things by erl_scan, erl_parse and friends, it looks like the only way to get at the preprocessor is to use epp on files. This is a problem because the code I want to dynamically create needs to use the record definitions and macros from the Message header file.</div>
<div><br></div><div>Trying to figure a way around this led me to aleppo, which neatly solved the problem of including the header file, but aleppo doesn't process records. For a brief and exciting moment, it looked like erl_expand_records might save the day, but it expects forms, and I can't get anything with records through erl_parse:parse_form.</div>
<div><br></div><div>Am I missing an easier way to dynamically create code that references macros and records?</div><div><br></div><div>Thanks,</div><div><br></div><div>Dan</div><div><br></div><div><br></div>