I am putting together a networking library atop usocket for use in a multiplayer Lisp game. So far, I have implemented a library for serializing data into a byte buffer.
Here is a simple example of serializing some things into a buffer:
(make-enum-serializer :opcode (:login :run :jump :logout)) (make-bitfield-serializer :login-flags (:hidden :stay-logged-in)) (serialize* (:opcode :login :uint32 sequence-number :login-flags '(:hidden) :string login-name :string password) buffer)
You can unserialize those bits into existing places:
(let (opcode sequence-number flags login-name password) (unserialize* (:opcode opcode :uint32 sequence-number :login-flags flags :string login-name :string password) buffer) ...)
You can unserialize them into newly-created variables for use within a body:
(unserialize-let* (:opcode opcode :uint32 sequence-number :login-flags flags :string login-name :string password) buffer ...)
Or, you can unserialize them into a list:
(let ((parts (unserialize-list* (:opcode :uint32 :login-flags :string :string) buffer))) ...)
You can find out more about the serialization library on my unet page.

