mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-24 13:39:46 -06:00
* Use go-micro store to cache the roles Add custom in-memory implementation * replace redis with custom etcd implementation * adjust table name for the cache in the roles manager * Fix tests * Fix sonarcloud issues * Refactor for sonarcloud * Allow configuration of cache per service * Reuse parent context in etcd implementation
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package etcd
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// Returns true if the limit isn't 0 AND is greater or equal to the number
|
|
// of results.
|
|
// If the limit is 0 or the number of items is less than the number of items,
|
|
// it will return false
|
|
func shouldFinish(numberOfResults, limit int64) bool {
|
|
if limit == 0 || numberOfResults < limit {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Return the first key out of the prefix represented by the parameter,
|
|
// as a byte sequence. Note that it applies to byte sequences and not
|
|
// rune sequences, so it might be ill-suited for multi-byte chars
|
|
func firstKeyOutOfPrefix(src []byte) []byte {
|
|
dst := make([]byte, len(src))
|
|
copy(dst, src)
|
|
var i int
|
|
for i = len(dst) - 1; i >= 0; i-- {
|
|
if dst[i] < 255 {
|
|
dst[i]++
|
|
break
|
|
}
|
|
}
|
|
return dst[:i+1]
|
|
}
|
|
|
|
// Return the first key out of the prefix represented by the parameter.
|
|
// This function relies on the firstKeyOutOfPrefix one, which uses a byte
|
|
// sequence, so it might be ill-suited if the string contains multi-byte chars.
|
|
func firstKeyOutOfPrefixString(src string) string {
|
|
srcBytes := []byte(src)
|
|
dstBytes := firstKeyOutOfPrefix(srcBytes)
|
|
return string(dstBytes)
|
|
}
|
|
|
|
// Reverse the string based on the containing runes
|
|
func reverseString(s string) string {
|
|
r := []rune(s)
|
|
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
|
|
r[i], r[j] = r[j], r[i]
|
|
}
|
|
return string(r)
|
|
}
|
|
|
|
// Build a string based on the parts, to be used as a prefix. Empty string is
|
|
// expected if no part is passed as parameter.
|
|
// The string will contain all the parts separated by '/'. The last char will
|
|
// also be '/'
|
|
//
|
|
// For example `buildPrefix(P1, P2, P3)` will return "P1/P2/P3/"
|
|
func buildPrefix(parts ...string) string {
|
|
var b strings.Builder
|
|
for _, part := range parts {
|
|
b.WriteString(part)
|
|
b.WriteRune('/')
|
|
}
|
|
return b.String()
|
|
}
|