You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: loader_types.go
    path of file: ./repos/client/go/teams
    
    the code of the file until where you have to start completion: package teams

import (
	"crypto/sha256"
	"fmt"

	"github.com/keybase/client/go/libkb"
	"github.com/keybase/client/go/protocol/keybase1"
)

// --------------------------------------------------

// An operation that occurs simultaneously on the child and parent team chains.
// This struct holds the child half of the operation.
type parentChildOperation struct {
	// The seqno in the parent sigchain that corresponds to this operation.
	parentSeqno keybase1.Seqno
	// The type of the child link
	linkType libkb.SigchainV2Type
	// The new subteam name. The only PCOs at the mo' are subteam renames.
	newName keybase1.TeamName
}

// --------------------------------------------------

type SignerX struct {
	signer keybase1.UserVersion
	// Whether the user is definitely an implicit admin
	implicitAdmin bool
}

func NewSignerX(signer keybase1.UserVersion, implicitAdmin
    
func unpackChainLink(link *SCChainLink) (*ChainLinkUnpacked, error) {
	var outerLink *libkb.OuterLinkV2WithMetadata
	var err error
	switch {
	case link.Sig != "":
		outerLink, err = libkb.DecodeOuterLinkV2(link.Sig)
	case link.SigV2Payload != "":
		outerLink, err = libkb.DecodeStubbedOuterLinkV2(link.SigV2Payload)
	default:
		return nil, fmt.Errorf("cannot decode chain link, no sig v2 payload")
	}
	if err != nil {
		return nil, fmt.Errorf("unpack outer: %v", err)
	}
	err = outerLink.AssertSomeFields(link.Version, link.Seqno)
	if err != nil {
		return nil, err
	}
	var inner *SCChainLinkPayload
	var innerLinkID libkb.LinkID
	var innerTeamID keybase1.TeamID
	if link.Payload == "" {
		// stubbed inner link
	} else {
		payload, err := link.UnmarshalPayload()
		if err != nil {
			return nil, fmt.Errorf("unmarshaling link payload: %v", err)
		}
		inner = &payload
		tmp := sha256.Sum256([]byte(link.Payload))
		innerLinkID = libkb.LinkID(tmp[:])
		innerTeamID, err = inner.TeamID()
		if err != nil {
			return nil, err
		}
	}
	ret := &ChainLinkUnpacked{
		source:      link,
		outerLink:   outerLink,
		inner:       inner,
		innerLinkID: innerLinkID,
		innerTeamID: innerTeamID,
	}
	return ret, nil
}