simser

command module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 18, 2023 License: Apache-2.0 Imports: 12 Imported by: 0

README

Simser

Simple serialization code generator for GO structs with unexported fields.

Like binary.Read, but a bit different and without reflection.

Features

Core
  • go module mode only
  • simple sequential [de]serialization of simple structs
  • supports non-exported fields, as well as exported
  • basic (int32, float64, etc.), named (type My uint64, etc.) field types, and arrays of them (struct type fields, array of arrays and slice of arrays are not supported right now)
  • no reflection in generated code, it is simple and fast
  • possibility to select type[s] to serialize via -types CLI flag
  • customize output function names
  • customize output file name
Advanced
  • slice field length can be set to any expression that returns int, by using tags. Currently [de]serialized instance can be referred to as "o", within expression.
    E.g. simser:"len=o.PreviousIntegerField-5".
    Or simser:"len=otherFunc()"
    Remember that only fields that get read before the slice field will have meaningful values (unless some tricks were used)

Usage

Basic

//go:generate go run github.com/amanofbits/simser -types=Header,body //go:generate go run github.com/amanofbits/simser -types=all

  • -types (required): can be a comma-separated list of types you want to process, or reserved keyword all for processing all top-level structs, found in file.
    all usage and requiredness of the argument can change in the future.
  • -output (optional): set output file name.
Custom

//go:generate go run github.com/amanofbits/simser -types=Header -output=file.name -read-fn-name=customReadFnName -write-fn-name=CustomWriteFnName

  • -read-fn-name (optional): custom name for deserializing function. Is set per-file.
  • -write-fn-name (optional): custom name for deserializing function. Is set per-file.

Project state

A bit messy, not very optimal, but simple and working. It was developed quickly from scratch, to serve a particular practical purpose, so the code itself is rather not perfect, but generated code should be good and do the job.
It's the first time I worked with go's ast, so it was a lot of try-and-fail behind the scenes. Feel free to file issues.

TODOs
  • add field skipping (skip, rskip, wskip tags)
  • add _ fields support (don't assign them on read, just skip n bytes; write customizable padding byte instead)
  • add ability to select only r or w functions with flags like -r[=customFnName], -w[=customFnName]

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
domain
Domain model, outputs of parser, inputs for generator.
Domain model, outputs of parser, inputs for generator.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL