@@ -46,6 +46,15 @@ const (
4646 StatusMismatchedDatastoreID
4747)
4848
49+ // RevisionHolder is an interface for types that can provide a unique ID and revision information.
50+ type RevisionHolder interface {
51+ // UniqueID returns the unique ID of the holder (typically: a datastore).
52+ UniqueID (context.Context ) (string , error )
53+
54+ // RevisionFromString converts a string representation of a revision to a Revision.
55+ RevisionFromString (string ) (datastore.Revision , error )
56+ }
57+
4958const uniqueIDPrefixLength = 8
5059
5160// MustNewFromRevisionForTesting generates an encoded zedtoken from an integral revision.
@@ -58,7 +67,7 @@ func MustNewFromRevisionForTesting(revision datastore.Revision) *v1.ZedToken {
5867}
5968
6069// NewFromRevision generates an encoded zedtoken from an integral revision.
61- func NewFromRevision (ctx context.Context , revision datastore.Revision , ds datastore. Datastore ) (* v1.ZedToken , error ) {
70+ func NewFromRevision (ctx context.Context , revision datastore.Revision , ds RevisionHolder ) (* v1.ZedToken , error ) {
6271 datastoreUniqueID , err := ds .UniqueID (ctx )
6372 if err != nil {
6473 return nil , fmt .Errorf (errEncodeError , err )
@@ -67,6 +76,12 @@ func NewFromRevision(ctx context.Context, revision datastore.Revision, ds datast
6776 return newFromRevision (revision , datastoreUniqueID )
6877}
6978
79+ // NewFromRevisionNoDatastoreID generates an encoded zedtoken from an integral revision without a datastore ID.
80+ // This is only for use in legacy scenarios. Most callers should use NewFromRevision.
81+ func NewFromRevisionNoDatastoreID (revision datastore.Revision ) (* v1.ZedToken , error ) {
82+ return newFromRevision (revision , legacyEmptyDatastoreID )
83+ }
84+
7085func newFromRevision (revision datastore.Revision , datastoreUniqueID string ) (* v1.ZedToken , error ) {
7186 datastoreUniqueIDPrefix := datastoreUniqueID
7287 if len (datastoreUniqueIDPrefix ) > uniqueIDPrefixLength {
@@ -118,7 +133,7 @@ func Decode(encoded *v1.ZedToken) (*zedtoken.DecodedZedToken, error) {
118133}
119134
120135// DecodeRevision converts and extracts the revision from a zedtoken or legacy zookie.
121- func DecodeRevision (encoded * v1.ZedToken , ds revisionDecoder ) (datastore.Revision , TokenStatus , error ) {
136+ func DecodeRevision (encoded * v1.ZedToken , ds RevisionHolder ) (datastore.Revision , TokenStatus , error ) {
122137 decoded , err := Decode (encoded )
123138 if err != nil {
124139 return datastore .NoRevision , StatusUnknown , err
@@ -162,8 +177,3 @@ func DecodeRevision(encoded *v1.ZedToken, ds revisionDecoder) (datastore.Revisio
162177 return datastore .NoRevision , StatusUnknown , fmt .Errorf (errDecodeError , fmt .Errorf ("unknown zookie version: %T" , decoded .VersionOneof ))
163178 }
164179}
165-
166- type revisionDecoder interface {
167- UniqueID (context.Context ) (string , error )
168- RevisionFromString (string ) (datastore.Revision , error )
169- }
0 commit comments