mirror of
https://github.com/wader/fq.git
synced 2024-11-24 03:05:22 +03:00
Merge pull request #65 from wader/doc-dev-help
doc,dev: Add some more decoder implementation help
This commit is contained in:
commit
a0ccde99a5
21
doc/dev.md
21
doc/dev.md
@ -4,20 +4,29 @@
|
|||||||
- fq uses a readline fork that can be found at https://github.com/wader/readline/tree/fq (the "fq" branch)
|
- fq uses a readline fork that can be found at https://github.com/wader/readline/tree/fq (the "fq" branch)
|
||||||
- cli readline uses raw mode so blocks ctrl-c to become a SIGINT
|
- cli readline uses raw mode so blocks ctrl-c to become a SIGINT
|
||||||
|
|
||||||
## Decoder implementation help
|
## Implement a decoder
|
||||||
|
|
||||||
|
### Steps to add new decoder
|
||||||
|
|
||||||
|
- Create a directory `format/<name>`
|
||||||
|
- Copy some similar decoder, `format/format/bson.go` is quite small, to `format/<name>/<name>.go`
|
||||||
|
- Cleanup and fill in the register struct, rename `format.BSON` and don't forget to change the string constant.
|
||||||
|
- Add an import to `format/all/all.go`
|
||||||
|
|
||||||
|
## Things to think about
|
||||||
|
|
||||||
- Main goal in the end is to produce a tree that is user-friendly and easy to work with.
|
- Main goal in the end is to produce a tree that is user-friendly and easy to work with.
|
||||||
Prefer a nice and easy to use tree over nice decoder implementation.
|
Prefer a nice and easy to use tree over nice decoder implementation.
|
||||||
- Use same names, symbols, constant number base etc as in specification.
|
- Use same names, symbols, constant number base etc as in specification. But prefer lowercase to jq/JSON-ish.
|
||||||
- Decode only ranges you know what it is. If possible let "parent" decide what to do with unknown
|
- Decode only ranges you know what they are. If possible let "parent" decide what to do with unknown
|
||||||
bits by using `*Decode*Len/Range/Limit` functions.
|
bits by using `*Decode*Len/Range/Limit` functions. fq will automatically add "unknown" fields.
|
||||||
- Try to no decode too much as one value.
|
- Try to no decode too much as one value.
|
||||||
A length encoded int could be two fields, but maybe a length prefixed string should be one.
|
A length encoded int could be two fields, but maybe a length prefixed string should be one.
|
||||||
Flags can be struct with bit-fields.
|
Flags can be struct with bit-fields.
|
||||||
- Map as many value as possible to more usage symbolic values.
|
- Map as many value as possible to more usage symbolic values.
|
||||||
- Endian inherited inside one format decoder, defaults to big endian for new format decoder
|
- Endian is inherited inside one format decoder, defaults to big endian for new format decoder
|
||||||
- Make sure zero length or no frames etc found fails decoding
|
- Make sure zero length or no frames etc found fails decoding
|
||||||
- Try validate input to make it non-ambiguous with other decoders
|
- If in the probe group make sure to validate input to make it non-ambiguous with other decoders
|
||||||
- Try keep decoder code as declarative as possible
|
- Try keep decoder code as declarative as possible
|
||||||
- Split into multiple sub formats if possible. Makes it possible to use them separately.
|
- Split into multiple sub formats if possible. Makes it possible to use them separately.
|
||||||
- Validate/Assert
|
- Validate/Assert
|
||||||
|
Loading…
Reference in New Issue
Block a user