blob: aa8985e102678054d4a7bb27dfd69bc2dded72d9 [file] [log] [blame]
// Copyright 2013 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package names
import (
"regexp"
)
const ApplicationTagKind = "application"
const (
ApplicationSnippet = "(?:[a-z][a-z0-9]*(?:-[a-z0-9]*[a-z][a-z0-9]*)*)"
NumberSnippet = "(?:0|[1-9][0-9]*)"
)
var validApplication = regexp.MustCompile("^" + ApplicationSnippet + "$")
// IsValidApplication returns whether name is a valid application name.
func IsValidApplication(name string) bool {
return validApplication.MatchString(name)
}
type ApplicationTag struct {
Name string
}
func (t ApplicationTag) String() string { return t.Kind() + "-" + t.Id() }
func (t ApplicationTag) Kind() string { return ApplicationTagKind }
func (t ApplicationTag) Id() string { return t.Name }
// NewApplicationTag returns the tag for the application with the given name.
func NewApplicationTag(applicationName string) ApplicationTag {
return ApplicationTag{Name: applicationName}
}
// ParseApplicationTag parses a application tag string.
func ParseApplicationTag(applicationTag string) (ApplicationTag, error) {
tag, err := ParseTag(applicationTag)
if err != nil {
return ApplicationTag{}, err
}
st, ok := tag.(ApplicationTag)
if !ok {
return ApplicationTag{}, invalidTagError(applicationTag, ApplicationTagKind)
}
return st, nil
}