signature/policy_config.go
func (pr *prSignedBy) UnmarshalJSON(data []byte) error {
	*pr = prSignedBy{}
	var tmp prSignedBy
	var gotKeyPath, gotKeyData = false, false
	var signedIdentity json.RawMessage
	if err := paranoidUnmarshalJSONObject(data, func(key string) interface{} {
		switch key {
		case "type":
			return &tmp.Type
		case "keyType":
			return &tmp.KeyType
		case "keyPath":
			gotKeyPath = true
			return &tmp.KeyPath
		case "keyData":
			gotKeyData = true
			return &tmp.KeyData
		case "signedIdentity":
			return &signedIdentity
		default:
			return nil
		}
	}); err != nil {
		return err
	}

	if tmp.Type != prTypeSignedBy {
		return InvalidPolicyFormatError(fmt.Sprintf("Unexpected policy requirement type \"%s\"", tmp.Type))
	}
	if signedIdentity == nil {
		tmp.SignedIdentity = NewPRMMatchRepoDigestOrExact()
	} else {
		si, err := newPolicyReferenceMatchFromJSON(signedIdentity)
		if err != nil {
			return err
		}
		tmp.SignedIdentity = si
	}

	var res *prSignedBy
	var err error
	switch {
	case gotKeyPath && gotKeyData:
		return InvalidPolicyFormatError("keyPath and keyData cannot be used simultaneously")
	case gotKeyPath && !gotKeyData:
		res, err = newPRSignedByKeyPath(tmp.KeyType, tmp.KeyPath, tmp.SignedIdentity)
	case !gotKeyPath && gotKeyData:
		res, err = newPRSignedByKeyData(tmp.KeyType, tmp.KeyData, tmp.SignedIdentity)
	case !gotKeyPath && !gotKeyData:
		return InvalidPolicyFormatError("At least one of keyPath and keyData mus be specified")
	default: // Coverage: This should never happen
		return errors.Errorf("Impossible keyPath/keyData presence combination!?")
	}
	if err != nil {
		return err
	}
	*pr = *res

	return nil
}
func (pr *prSignedBy) UnmarshalJSON(data []byte) error {
	*pr = prSignedBy{}
	var tmp prSignedBy
	var gotKeyPath, gotKeyData = false, false
	var signedIdentity json.RawMessage
	if err := paranoidUnmarshalJSONObject(data, func(key string) interface{} {
		switch key {
		case "type":
			return &tmp.Type
		case "keyType":
			return &tmp.KeyType
		case "keyPath":
			gotKeyPath = true
			return &tmp.KeyPath
		case "keyData":
			gotKeyData = true
			return &tmp.KeyData
		case "signedIdentity":
			return &signedIdentity
		default:
			return nil
		}
	}); err != nil {
		return err
	}

	if tmp.Type != prTypeSignedBy {
		return InvalidPolicyFormatError(fmt.Sprintf("Unexpected policy requirement type \"%s\"", tmp.Type))
	}
	if signedIdentity == nil {
		tmp.SignedIdentity = NewPRMMatchRepoDigestOrExact()
	} else {
		si, err := newPolicyReferenceMatchFromJSON(signedIdentity)
		if err != nil {
			return err
		}
		tmp.SignedIdentity = si
	}

	var res *prSignedBy
	var err error
	switch {
	case gotKeyPath && gotKeyData:
		return InvalidPolicyFormatError("keyPath and keyData cannot be used simultaneously")
	case gotKeyPath && !gotKeyData:
		res, err = newPRSignedByKeyPath(tmp.KeyType, tmp.KeyPath, tmp.SignedIdentity)
	case !gotKeyPath && gotKeyData:
		res, err = newPRSignedByKeyData(tmp.KeyType, tmp.KeyData, tmp.SignedIdentity)
	case !gotKeyPath && !gotKeyData:
		return InvalidPolicyFormatError("At least one of keyPath and keyData mus be specified")
	default: // Coverage: This should never happen
		return errors.Errorf("Impossible keyPath/keyData presence combination!?")
	}
	if err != nil {
		return err
	}
	*pr = *res

	return nil
}
func ( pr * prSignedBy ) UnmarshalJSON ( data [ ] byte ) error { * pr = prSignedBy { } var tmp prSignedBy var gotKeyPath , gotKeyData = false , false var signedIdentity json . RawMessage if err := paranoidUnmarshalJSONObject ( data , func ( key string ) interface { } { switch key { case " " : return & tmp . Type case " " : return & tmp . KeyType case " " : gotKeyPath = true return & tmp . KeyPath case " " : gotKeyData = true return & tmp . KeyData case " " : return & signedIdentity default : return nil } } ) ; err != nil { return err } if tmp . Type != prTypeSignedBy { return InvalidPolicyFormatError ( fmt . Sprintf ( " \" \" " , tmp . Type ) ) } if signedIdentity == nil { tmp . SignedIdentity = NewPRMMatchRepoDigestOrExact ( ) } else { si , err := newPolicyReferenceMatchFromJSON ( signedIdentity ) if err != nil { return err } tmp . SignedIdentity = si } var res * prSignedBy var err error switch { case gotKeyPath && gotKeyData : return InvalidPolicyFormatError ( " " ) case gotKeyPath && ! gotKeyData : res , err = newPRSignedByKeyPath ( tmp . KeyType , tmp . KeyPath , tmp . SignedIdentity ) case ! gotKeyPath && gotKeyData : res , err = newPRSignedByKeyData ( tmp . KeyType , tmp . KeyData , tmp . SignedIdentity ) case ! gotKeyPath && ! gotKeyData : return InvalidPolicyFormatError ( " " ) default : // Coverage: This should never happen return errors . Errorf ( " " ) } if err != nil { return err } * pr = * res return nil }
// UnmarshalJSON implements the json.Unmarshaler interface.
UnmarshalJSON implements the json . Unmarshaler interface .