BFB goext library
A collection of general & useful library methods
This should not have any heavy dependencies (gin, mongo, etc) and add missing basic language features...
Potentially needs export GOPRIVATE="gogs.mikescher.com"
Packages:
Name |
Maintainer |
Description |
langext |
Mike |
General uttility/helper functions, (everything thats missing from go standard library) |
mathext |
Mike |
Utility/Helper functions for math |
cryptext |
Mike |
Utility/Helper functions for encryption |
syncext |
Mike |
Utility/Helper funtions for multi-threading / mutex / channels |
dataext |
Mike |
Various useful data structures |
zipext |
Mike |
Utility for zip/gzip/tar etc |
reflectext |
Mike |
Utility for golang reflection |
fsext |
Mike |
Utility for filesytem access |
ctxext |
Mike |
Utility for context.Context |
|
|
|
mongoext |
Mike |
Utility/Helper functions for mongodb (kinda abandoned) |
cursortoken |
Mike |
MongoDB cursortoken implementation |
pagination |
Mike |
Pagination implementation |
|
|
|
totpext |
Mike |
Implementation of TOTP (2-Factor-Auth) |
termext |
Mike |
Utilities for terminals (mostly color output) |
confext |
Mike |
Parses environment configuration into structs |
cmdext |
Mike |
Runner for external commands/processes |
|
|
|
sq |
Mike |
Utility functions for sql based databases (primarily sqlite) |
tst |
Mike |
Utility functions for unit tests |
|
|
|
rfctime |
Mike |
Classes for time seriallization, with different marshallign method for mongo and json |
gojson |
Mike |
Same interface for marshalling/unmarshalling as go/json, except with proper serialization of null arrays/maps |
|
|
|
bfcodegen |
Mike |
Various codegen tools (run via go generate) |
|
|
|
rext |
Mike |
Regex Wrapper, wraps regexp with a better interface |
wmo |
Mike |
Mongo Wrapper, wraps mongodb with a better interface |
|
|
|
scn |
Mike |
SimpleCloudNotifier |
|
|
|
Usage:
exerr
- see mongoext/builder.go for full info
Short summary:
- An better error package with metadata, listener, api-output and error-traces
- Initialize with
exerr.Init()
- Never return
err
direct, always use exerr.Wrap(err, "...") - add metadata where applicable
- at the end either Print(), Fatal() or Output() your error (print = stdout, fatal = panic, output = json API response)
- You can add listeners with exerr.RegisterListener(), and save the full errors to a db or smth
wmo
- A typed wrapper around the official mongo-go-driver
- Use
wmo.W[...](...)
to wrap the collections and type-ify them
- The new collections have all the usual methods, but types
- Also they have List() and Paginate() methods for paginated listings (witehr with a cursortoken or page/limit)
- Register additional hooks with
WithDecodeFunc
, WithUnmarshalHook
, WithMarshalHook
, WithModifyingPipeline
, WithModifyingPipelineFunc
- List(), Paginate(), etc support filter interfaces
- Rule(s) of thumb:
- filter the results in the filter interface
- sort the results in the sort function of the filter interface
- add joins ($lookup's) in the
WithModifyingPipelineFunc
/WithModifyingPipeline
ginext
- A wrapper around gin-gonic/gin
- create the gin engine with
ginext.NewEngine
- Add routes with
engine.Routes()...
.Use(..)
adds a middleware
.Group(..)
adds a group
.Get().Handle(..)
adds a handler
- Handler return values (in contract to ginext) - values implement the
ginext.HTTPResponse
interface
- Every handler starts with something like:
func (handler Handler) CommunityMetricsValues(pctx ginext.PreContext) ginext.HTTPResponse {
type communityURI struct {
Version string `uri:"version"`
CommunityID models.CommunityID `uri:"cid"`
}
type body struct {
UserID models.UserID `json:"userID"`
EventID models.EventID `json:"eventID"`
}
var u uri
var b body
ctx, gctx, httpErr := pctx.URI(&u).Body(&b).Start() // can have more unmarshaller, like header, form, etc
if httpErr != nil {
return *httpErr
}
defer ctx.Cancel()
// do stuff
}
sq
- TODO (like mongoext for sqlite/sql databases)