Skip to content

chein-huang/workflow

Repository files navigation

workflow

Quick start

Import

import (
    "github.com/chein-huang/workflow"
)

Define work function

func work(ctx context.Context, data *workflow.WorkData) error {
    // do something
}

Only work

data, err := workflow.StartWorkFlow(
    work,
)

With function

data, err := workflow.StartWorkFlow(
    work, 
    workflow.WithFinish(
        func(ctx context.Context, data *workflow.WorkData) error {
            // do something
        },
    ),
)

Define struct and interface method

type TestStruct struct {
    workBegin        workflow.Event
    workBeforeCommit workflow.Event
    workCommit       workflow.Event
    workRollback     workflow.Event
    workFinish       workflow.Event
}

func (s *TestStruct) WorkBegin(ctx context.Context, data *workflow.WorkData) error {
    if s.workBegin != nil {
        return s.workBegin(ctx, data)
    }
    return nil
}

func (s *TestStruct) WorkBeforeCommit(ctx context.Context, data *workflow.WorkData) error {
    if s.workBeforeCommit != nil {
        return s.workBeforeCommit(ctx, data)
    }
    return nil
}

func (s *TestStruct) WorkCommit(ctx context.Context, data *workflow.WorkData) error {
    if s.workCommit != nil {
        return s.workCommit(ctx, data)
    }
    return nil
}

func (s *TestStruct) WorkRollback(ctx context.Context, data *workflow.WorkData) error {
    if s.workRollback != nil {
        return s.workRollback(ctx, data)
    }
    return nil
}

func (s *TestStruct) WorkFinish(ctx context.Context, data *workflow.WorkData) error {
    if s.workFinish != nil {
        return s.workFinish(ctx, data)
    }
    return nil
}

With interface

s := TestStruct{}
data, err := workflow.StartWorkFlow(
    work, 
    workflow.WithInterface(&s),
)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages