sc-expression

command module
v0.0.0-...-ccdbbf6 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2022 License: Unlicense, MIT Imports: 5 Imported by: 0

README

https://pkg.go.dev/zxq.co/howl/sc-expression

Dual-licensed under MIT and Unlicense.

Documentation

Overview

Command sc-expressions provides status code expression, which are simple expressions to match to HTTP status codes, or any status code which has 3 digits exactly. It allows to generate from a string a function job system, providing an expression to specify on which API responses we which matches only a certain set of codes. Useful application includes, in a should mark the request as errored and in which circumstances we should retry it.

For instance, an error condition could be specified with the expression 4XX,5XX - and a retry condition on 429,5XX (seeing as all other 4XX responses are likely to be permanent errors).

Syntax

Syntax is as follows:

  • Empty: # No status code matches
  • Equal: 400 # The status code must == 400
  • Placeholder: 4XX # The status code must be 3 digits and start with 4
  • Catch-all: XXX # Match all status codes
  • Not equal: !200 # The status code must != 200 !2XX # The status code must not (have 3 digits and start with 2)
  • OR for equal: 400,401 # The status code must == 400 || == 401
  • AND for neq: !200,!204 # The status code must != 200 && != 204
  • Combination: 4XX,!401 # The status code must be like 4XX && != 401 4XX,5XX,!402,!42X # (like 4XX || like 5XX) && (!= 402 && not like 42X)
  • Illegal: !400,4XX # Positives must come before negations 2X0 # Placeholders only at the end of the code.

Negations may only be specified once. Note that the empty expression also has another equivalent, that is !XXX.

Performance

Parse+execution performance (which is what would happen in most cases, as the generated functions are not meant to be cached) generally can execute within ~2µs on modern CPUs. Go benchmarks for my computer:

cpu: AMD Ryzen 7 PRO 4750U with Radeon Graphics
BenchmarkStatusCodeExpressionParseAndRun-16              1880427               689.1 ns/op
BenchmarkStatusCodeExpressionParseAndRun_Long-16          580285              1877 ns/op

Command

A simple main() program is provided with this implementation, as this is not a package that is meant to be imported due to its low complexity (remember the Go proverb - "a little copying is better than a little dependency"). The 3 functions are less than 100LOC of code you might benefit from customising, so it's worth the effort...

Jump to

Keyboard shortcuts

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