func()

in pkg/client/unit.go [186:216]


func (u *Unit) UpdateState(state UnitState, message string, payload map[string]interface{}) error {
	var statePayload *structpb.Struct
	var err error
	if payload != nil {
		statePayload, err = structpb.NewStruct(payload)
		if err != nil {
			return err
		}
	}
	u.stateMu.Lock()
	defer u.stateMu.Unlock()
	changed := false
	if u.state != state {
		u.state = state
		changed = true
	}
	if u.stateMsg != message {
		u.stateMsg = message
		changed = true
	}
	if (u.statePayload == nil && statePayload != nil) ||
		(u.statePayload != nil && statePayload == nil) ||
		!gproto.Equal(u.statePayload, statePayload) {
		u.statePayload = statePayload
		changed = true
	}
	if changed {
		u.client.unitsStateChanged()
	}
	return nil
}