registry.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package genericops
  2. import (
  3. "errors"
  4. "flow"
  5. "flow/registry"
  6. "fmt"
  7. "math/rand"
  8. "strings"
  9. "time"
  10. )
  11. // New create new registry with generic operations
  12. func New() *registry.R {
  13. r := registry.New()
  14. // Test functions
  15. r.Add(testErrorPanic, testErrorDelayed, testRandomError).
  16. Tags("testing")
  17. registry.Describer(
  18. r.Add("wait", wait),
  19. r.Add("waitRandom", waitRandom),
  20. ).Tags("testing").Extra("style", map[string]string{"color": "#8a5"})
  21. r.Add(strings.Split, strings.Join).Tags("strings")
  22. return r
  23. }
  24. func wait(data flow.Data, n int) flow.Data {
  25. time.Sleep(time.Duration(n) * time.Second) // Simulate
  26. return data
  27. }
  28. func waitRandom(data flow.Data) flow.Data {
  29. time.Sleep(time.Duration(rand.Intn(10)) * time.Second)
  30. return data
  31. }
  32. ////////////////////////
  33. // testOps
  34. ////////////////
  35. func testErrorPanic(n int) flow.Data {
  36. dur := time.Duration(n)
  37. time.Sleep(dur * time.Second)
  38. panic("I panicked")
  39. }
  40. func testErrorDelayed(n int) (flow.Data, error) {
  41. dur := time.Duration(n)
  42. time.Sleep(dur * time.Second)
  43. return nil, fmt.Errorf("I got an error %v", dur)
  44. }
  45. func testRandomError(d flow.Data) (flow.Data, error) {
  46. r := rand.Intn(10)
  47. if r > 5 {
  48. return nil, errors.New("I failed on purpose")
  49. }
  50. return d, nil
  51. }