// This file will be moved to a new location. // Labels provide a way to associate user-defined metadata with various // objects. Labels may be used to organize objects into non-hierarchical // groups; think metadata tags attached to mp3s. syntax = "proto2"; package tech.label; // A key-value pair applied to a given object. message Label { // The key of a label is a syntactically valid URL (as per RFC 1738) with // the "scheme" and initial slashes omitted and with the additional // restrictions noted below. Each key should be globally unique. The // "host" portion is called the "namespace" and is not necessarily // resolvable to a network endpoint. Instead, the namespace indicates what // system or entity defines the semantics of the label. Namespaces do not // restrict the set of objects to which a label may be associated. // // Keys are defined by the following grammar: // // key = hostname "/" kpath // kpath = ksegment *[ "/" ksegment ] // ksegment = alphadigit | *[ alphadigit | "-" | "_" | "." ] // // where "hostname" and "alphadigit" are defined as in RFC 1738. // // Example key: // spanner.google.com/universe required string key = 1; // The value of the label. oneof value { // A string value. string str_value = 2; // An integer value. int64 num_value = 3; } } // A collection of labels, such as the set of all labels attached to an // object. Each label in the set must have a different key. // // Users should prefer to embed "repeated Label" directly when possible. // This message should only be used in cases where that isn't possible (e.g. // with oneof). message Labels { repeated Label label = 1; }