blob: c911ffdd5cdb766d5982dd7b8bffcc2f0b7b253d [file] [log] [blame]
// Copyright 2015 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package names
import (
"regexp"
"github.com/juju/utils"
)
const (
// PayloadTagKind is used as the prefix for the string
// representation of payload tags.
PayloadTagKind = "payload"
// This can be expanded later, as needed.
payloadClass = "([a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)"
)
var validPayload = regexp.MustCompile("^" + payloadClass + "$")
// IsValidPayload returns whether id is a valid Juju ID for
// a charm payload. The ID must be a valid alpha-numeric (plus hyphens).
func IsValidPayload(id string) bool {
return validPayload.MatchString(id)
}
// For compatibility with Juju 1.25, UUIDs are also supported.
func isValidPayload(id string) bool {
return IsValidPayload(id) || utils.IsValidUUIDString(id)
}
// PayloadTag represents a charm payload.
type PayloadTag struct {
id string
}
// NewPayloadTag returns the tag for a charm's payload with the given id.
func NewPayloadTag(id string) PayloadTag {
return PayloadTag{
id: id,
}
}
// ParsePayloadTag parses a payload tag string.
// So ParsePayloadTag(tag.String()) === tag.
func ParsePayloadTag(tag string) (PayloadTag, error) {
t, err := ParseTag(tag)
if err != nil {
return PayloadTag{}, err
}
pt, ok := t.(PayloadTag)
if !ok {
return PayloadTag{}, invalidTagError(tag, PayloadTagKind)
}
return pt, nil
}
// Kind implements Tag.
func (t PayloadTag) Kind() string {
return PayloadTagKind
}
// Id implements Tag.Id. It always returns the same ID with which
// it was created. So NewPayloadTag(x).Id() == x for all valid x.
func (t PayloadTag) Id() string {
return t.id
}
// String implements Tag.
func (t PayloadTag) String() string {
return tagString(t)
}