ok.go raw

   1  package app
   2  
   3  import (
   4  	"next.orly.dev/pkg/nostr/encoders/envelopes/eventenvelope"
   5  	"next.orly.dev/pkg/nostr/encoders/envelopes/okenvelope"
   6  	"next.orly.dev/pkg/nostr/encoders/reason"
   7  )
   8  
   9  // OK represents a function that processes events or operations, using provided
  10  // parameters to generate formatted messages and return errors if any issues
  11  // occur during processing.
  12  type OK func(
  13  	l *Listener, env eventenvelope.I, format string, params ...any,
  14  ) (err error)
  15  
  16  // OKs provides a collection of handler functions for managing different types
  17  // of operational outcomes, each corresponding to specific error or status
  18  // conditions such as authentication requirements, rate limiting, and invalid
  19  // inputs.
  20  type OKs struct {
  21  	Ok           OK
  22  	AuthRequired OK
  23  	PoW          OK
  24  	Duplicate    OK
  25  	Blocked      OK
  26  	RateLimited  OK
  27  	Invalid      OK
  28  	Error        OK
  29  	Unsupported  OK
  30  	Restricted   OK
  31  }
  32  
  33  // Ok provides a collection of handler functions for managing different types of
  34  // operational outcomes, each corresponding to specific error or status
  35  // conditions such as authentication requirements, rate limiting, and invalid
  36  // inputs.
  37  var Ok = OKs{
  38  	Ok: func(
  39  		l *Listener, env eventenvelope.I, format string,
  40  		params ...any,
  41  	) (err error) {
  42  		return okenvelope.NewFrom(
  43  			env.Id(), true, []byte{},
  44  		).Write(l)
  45  	},
  46  	AuthRequired: func(
  47  		l *Listener, env eventenvelope.I, format string,
  48  		params ...any,
  49  	) (err error) {
  50  		return okenvelope.NewFrom(
  51  			env.Id(), false, reason.AuthRequired.F(format, params...),
  52  		).Write(l)
  53  	},
  54  	PoW: func(
  55  		l *Listener, env eventenvelope.I, format string,
  56  		params ...any,
  57  	) (err error) {
  58  		return okenvelope.NewFrom(
  59  			env.Id(), false, reason.PoW.F(format, params...),
  60  		).Write(l)
  61  	},
  62  	Duplicate: func(
  63  		l *Listener, env eventenvelope.I, format string,
  64  		params ...any,
  65  	) (err error) {
  66  		return okenvelope.NewFrom(
  67  			env.Id(), false, reason.Duplicate.F(format, params...),
  68  		).Write(l)
  69  	},
  70  	Blocked: func(
  71  		l *Listener, env eventenvelope.I, format string,
  72  		params ...any,
  73  	) (err error) {
  74  		return okenvelope.NewFrom(
  75  			env.Id(), false, reason.Blocked.F(format, params...),
  76  		).Write(l)
  77  	},
  78  	RateLimited: func(
  79  		l *Listener, env eventenvelope.I, format string,
  80  		params ...any,
  81  	) (err error) {
  82  		return okenvelope.NewFrom(
  83  			env.Id(), false, reason.RateLimited.F(format, params...),
  84  		).Write(l)
  85  	},
  86  	Invalid: func(
  87  		l *Listener, env eventenvelope.I, format string,
  88  		params ...any,
  89  	) (err error) {
  90  		return okenvelope.NewFrom(
  91  			env.Id(), false, reason.Invalid.F(format, params...),
  92  		).Write(l)
  93  	},
  94  	Error: func(
  95  		l *Listener, env eventenvelope.I, format string,
  96  		params ...any,
  97  	) (err error) {
  98  		return okenvelope.NewFrom(
  99  			env.Id(), false, reason.Error.F(format, params...),
 100  		).Write(l)
 101  	},
 102  	Unsupported: func(
 103  		l *Listener, env eventenvelope.I, format string,
 104  		params ...any,
 105  	) (err error) {
 106  		return okenvelope.NewFrom(
 107  			env.Id(), false, reason.Unsupported.F(format, params...),
 108  		).Write(l)
 109  	},
 110  	Restricted: func(
 111  		l *Listener, env eventenvelope.I, format string,
 112  		params ...any,
 113  	) (err error) {
 114  		return okenvelope.NewFrom(
 115  			env.Id(), false, reason.Restricted.F(format, params...),
 116  		).Write(l)
 117  	},
 118  }
 119