op_set_status.go

 1package bug
 2
 3import (
 4	"github.com/MichaelMure/git-bug/util/git"
 5	"github.com/pkg/errors"
 6)
 7
 8// SetStatusOperation will change the status of a bug
 9
10var _ Operation = SetStatusOperation{}
11
12type SetStatusOperation struct {
13	*OpBase
14	Status Status `json:"status"`
15}
16
17func (op SetStatusOperation) base() *OpBase {
18	return op.OpBase
19}
20
21func (op SetStatusOperation) Hash() (git.Hash, error) {
22	return hashOperation(op)
23}
24
25func (op SetStatusOperation) Apply(snapshot *Snapshot) {
26	snapshot.Status = op.Status
27}
28
29func (op SetStatusOperation) Validate() error {
30	if err := opBaseValidate(op, SetStatusOp); err != nil {
31		return err
32	}
33
34	if err := op.Status.Validate(); err != nil {
35		return errors.Wrap(err, "status")
36	}
37
38	return nil
39}
40
41func NewSetStatusOp(author Person, unixTime int64, status Status) SetStatusOperation {
42	return SetStatusOperation{
43		OpBase: newOpBase(SetStatusOp, author, unixTime),
44		Status: status,
45	}
46}
47
48// Convenience function to apply the operation
49func Open(b Interface, author Person, unixTime int64) error {
50	op := NewSetStatusOp(author, unixTime, OpenStatus)
51	if err := op.Validate(); err != nil {
52		return err
53	}
54	b.Append(op)
55	return nil
56}
57
58// Convenience function to apply the operation
59func Close(b Interface, author Person, unixTime int64) error {
60	op := NewSetStatusOp(author, unixTime, ClosedStatus)
61	if err := op.Validate(); err != nil {
62		return err
63	}
64	b.Append(op)
65	return nil
66}