Created Writing a Macro (markdown)
This commit is contained in:
parent
462496ad08
commit
f4429c29c9
|
@ -0,0 +1,23 @@
|
|||
Macros are complex and powerful, allowing you to build the AST imperatively. So how does one build AST? It's not as hard as it sounds.
|
||||
|
||||
I'm going to go over the process I used to write the marshaling macro used in keineSchweine (github/fowlmouth/keineSchweine/lib/genpacket.nim)
|
||||
|
||||
Okay, so I have described a packet as a object type holding the information needed, for example a packet that gets sent out to clients when a new client connects might look like this:
|
||||
```nimrod
|
||||
type TClientJoined = object
|
||||
playerID: int
|
||||
alias: string
|
||||
```
|
||||
|
||||
To make this useful, I'd like to build the TClientJoined with the information needed and write it a stream, and have a function that takes a stream and reads from it into a TClientJoined
|
||||
```nimrod
|
||||
# writeBE and readBE are reading/writing functions that will read/write in big endian
|
||||
proc write (packet: var TClientJoined; stream: PStream) =
|
||||
writeBE stream, packet.playerID
|
||||
writeBE stream, packet.alias
|
||||
proc readClientJoined (stream: PStream): TClientJoined =
|
||||
readBE stream, result.playerID
|
||||
readBE stream, result.alias
|
||||
```
|
||||
|
||||
|
Loading…
Reference in New Issue