View Source
const (
	RootNamespaceID = "root"


View Source
var (
	ErrNoNamespace error      = errors.New("no namespace")
	RootNamespace  *Namespace = &Namespace{
		ID:   RootNamespaceID,
		Path: "",


func Canonicalize

func Canonicalize(nsPath string) string

    Canonicalize trims any prefix '/' and adds a trailing '/' to the provided string

    func ContextWithNamespace

    func ContextWithNamespace(ctx context.Context, ns *Namespace) context.Context

    func RootContext

    func RootContext(ctx context.Context) context.Context

    func SplitIDFromString

    func SplitIDFromString(input string) (string, string)


    type Namespace

    type Namespace struct {
    	ID   string `json:"id"`
    	Path string `json:"path"`

    func FromContext

    func FromContext(ctx context.Context) (*Namespace, error)

      This function caches the ns to avoid doing a .Value lookup over and over, because it's called a *lot* in the request critical path. .Value is concurrency-safe so uses some kind of locking/atomicity, but it should never be read before first write, plus we don't believe this will be called from different goroutines, so it should be safe.

      func (*Namespace) HasParent

      func (n *Namespace) HasParent(possibleParent *Namespace) bool

      func (*Namespace) TrimmedPath

      func (n *Namespace) TrimmedPath(path string) string

      Source Files