File: application.go

package info (click to toggle)
golang-github-juju-names 4.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, trixie
  • size: 340 kB
  • sloc: makefile: 14
file content (48 lines) | stat: -rw-r--r-- 1,336 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 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
}