XMPP codec should allow third-party developers to create their own submodules and plug them into xmpp_codec.
This is implemented in 3976a85
Here is a brief description for developers about how they could use it:
- Clone xmpp library somewhere:
$ git clone https://github.com/processone/xmpp
- Compile it:
$ make
- Add new elements to
specs/xmpp_codec.spec with proper module attribute set
- Recompile the codec:
$ make spec
- The generator will create new file(s) in
src directory. Those files are your submodules. Grab them to the working directory of your project.
- The generator also will generate new records (with specs) inside
include/xmpp_codec.hrl. Grab those too in your project (either put them in your *.hrl files or in your *.erl files directly).
- In runtime, call to xmpp:register_codec/1 in order to register your submodule within xmpp_codec.
Done!
Not very clear, eh? OK, here is an example.
Let's say we want to add submodule for the following element:
<foo x='1' xmlns='ns:foo'/>
Clone and compile the repo, open specs/xmpp_codec.spec and put the following spec somewhere inside it (the order doesn't matter):
-xml(foo,
#elem{name = <<"foo">>,
xmlns = <<"ns:foo">>,
module = foo,
result = {foo, '$x'},
attrs = [#attr{name = <<"x">>}]}).
Now type make spec in order to recompile the specification. New file will be created inside src directory:
$ git status
...
Untracked files:
...
src/foo.erl
Copy this foo.erl into your working directory.
Now, consult the recompiled xmpp_codec.hrl:
$ git diff include/xmpp_codec.hrl
...
+-record(foo, {x = <<>> :: binary()}).
+-type foo() :: #foo{}.
+
...
Put this record and type definition somewhere in your files.
Now, you need to register your submodule (foo) during startup. This should look something like this:
-module(mod_foo).
...
start(Blah, ...) ->
...
xmpp:register_codec(foo),
...
Note, that you need to call xmpp:register_codec/1 again, if you have your submodule (foo) recompiled and reloaded in runtime.
Also, you may want to unregister the submodule during shutdown procedure, although, strictly speaking, this is not required:
stop(...) ->
xmpp:unregister_codec(foo)
Now you have everything done to use your new "subcodec".
Have fun ;)
XMPP codec should allow third-party developers to create their own submodules and plug them into xmpp_codec.
This is implemented in 3976a85
Here is a brief description for developers about how they could use it:
$ git clone https://github.com/processone/xmpp$ makespecs/xmpp_codec.specwith propermoduleattribute set$ make specsrcdirectory. Those files are your submodules. Grab them to the working directory of your project.include/xmpp_codec.hrl. Grab those too in your project (either put them in your *.hrl files or in your *.erl files directly).Done!
Not very clear, eh? OK, here is an example.
Let's say we want to add submodule for the following element:
Clone and compile the repo, open
specs/xmpp_codec.specand put the following spec somewhere inside it (the order doesn't matter):Now type
make specin order to recompile the specification. New file will be created insidesrcdirectory:Copy this
foo.erlinto your working directory.Now, consult the recompiled
xmpp_codec.hrl:Put this record and type definition somewhere in your files.
Now, you need to register your submodule (
foo) during startup. This should look something like this:Note, that you need to call
xmpp:register_codec/1again, if you have your submodule (foo) recompiled and reloaded in runtime.Also, you may want to unregister the submodule during shutdown procedure, although, strictly speaking, this is not required:
Now you have everything done to use your new "subcodec".
Have fun ;)