mirror of
https://github.com/lightninglabs/loop
synced 2024-11-13 13:10:30 +00:00
9678c7817d
This commits adds an optional label to our swaps, and writes it to disk under a separate key in our swap bucket. This approach is chosen rather than an on-the-fly addition to our existing swap contract field so that we do not need to deal with EOF checking in the future. To allow creation of unique internal labels, we add a reserved prefix which can be used by the daemon to set labels that are distinct from client set ones.
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package labels
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
const (
|
|
// MaxLength is the maximum length we allow for labels.
|
|
MaxLength = 500
|
|
|
|
// Reserved is used as a prefix to separate labels that are created by
|
|
// loopd from those created by users.
|
|
Reserved = "[reserved]"
|
|
)
|
|
|
|
var (
|
|
// ErrLabelTooLong is returned when a label exceeds our length limit.
|
|
ErrLabelTooLong = errors.New("label exceeds maximum length")
|
|
|
|
// ErrReservedPrefix is returned when a label contains the prefix
|
|
// which is reserved for internally produced labels.
|
|
ErrReservedPrefix = errors.New("label contains reserved prefix")
|
|
)
|
|
|
|
// Validate checks that a label is of appropriate length and is not in our list
|
|
// of reserved labels.
|
|
func Validate(label string) error {
|
|
if len(label) > MaxLength {
|
|
return ErrLabelTooLong
|
|
}
|
|
|
|
// If the label is shorter than our reserved prefix, it cannot contain
|
|
// it.
|
|
if len(label) < len(Reserved) {
|
|
return nil
|
|
}
|
|
|
|
// Check if our label begins with our reserved prefix. We don't mind if
|
|
// it has our reserved prefix in another case, we just need to be able
|
|
// to reserve a subset of labels with this prefix.
|
|
if label[0:len(Reserved)] == Reserved {
|
|
return ErrReservedPrefix
|
|
}
|
|
|
|
return nil
|
|
}
|