type ConfChangeI … // MarshalConfChange calls Marshal on the underlying ConfChange or ConfChangeV2 // and returns the result along with the corresponding EntryType. func MarshalConfChange(c ConfChangeI) (EntryType, []byte, error) { … } // AsV2 returns a V2 configuration change carrying out the same operation. func (c ConfChange) AsV2() ConfChangeV2 { … } // AsV1 returns the ConfChange and true. func (c ConfChange) AsV1() (ConfChange, bool) { … } // AsV2 is the identity. func (c ConfChangeV2) AsV2() ConfChangeV2 { … } // AsV1 returns ConfChange{} and false. func (c ConfChangeV2) AsV1() (ConfChange, bool) { … } // EnterJoint returns two bools. The second bool is true if and only if this // config change will use Joint Consensus, which is the case if it contains more // than one change or if the use of Joint Consensus was requested explicitly. // The first bool can only be true if second one is, and indicates whether the // Joint State will be left automatically. func (c ConfChangeV2) EnterJoint() (autoLeave bool, ok bool) { … } // LeaveJoint is true if the configuration change leaves a joint configuration. // This is the case if the ConfChangeV2 is zero, with the possible exception of // the Context field. func (c ConfChangeV2) LeaveJoint() bool { … } // ConfChangesFromString parses a Space-delimited sequence of operations into a // slice of ConfChangeSingle. The supported operations are: // - vn: make n a voter, // - ln: make n a learner, // - rn: remove n, and // - un: update n. func ConfChangesFromString(s string) ([]ConfChangeSingle, error) { … } // ConfChangesToString is the inverse to ConfChangesFromString. func ConfChangesToString(ccs []ConfChangeSingle) string { … }