1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package genericops
- import (
- "errors"
- "flow"
- "flow/registry"
- "fmt"
- "math/rand"
- "strings"
- "time"
- )
- // New create new registry with generic operations
- func New() *registry.R {
- r := registry.New()
- // Test functions
- r.Add(testErrorPanic, testErrorDelayed, testRandomError).
- Tags("testing")
- registry.Describer(
- r.Add("wait", wait),
- r.Add("waitRandom", waitRandom),
- ).Tags("testing").Extra("style", map[string]string{"color": "#8a5"})
- r.Add(strings.Split, strings.Join).Tags("strings")
- return r
- }
- func wait(data flow.Data, n int) flow.Data {
- time.Sleep(time.Duration(n) * time.Second) // Simulate
- return data
- }
- func waitRandom(data flow.Data) flow.Data {
- time.Sleep(time.Duration(rand.Intn(10)) * time.Second)
- return data
- }
- ////////////////////////
- // testOps
- ////////////////
- func testErrorPanic(n int) flow.Data {
- dur := time.Duration(n)
- time.Sleep(dur * time.Second)
- panic("I panicked")
- }
- func testErrorDelayed(n int) (flow.Data, error) {
- dur := time.Duration(n)
- time.Sleep(dur * time.Second)
- return nil, fmt.Errorf("I got an error %v", dur)
- }
- func testRandomError(d flow.Data) (flow.Data, error) {
- r := rand.Intn(10)
- if r > 5 {
- return nil, errors.New("I failed on purpose")
- }
- return d, nil
- }
|