diff --git a/util/keys/ev.go b/util/keys/ev.go new file mode 100644 index 00000000..75002fad --- /dev/null +++ b/util/keys/ev.go @@ -0,0 +1,58 @@ +// Copyright © 2016 Abcum Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package keys + +// EV ... +type EV struct { + KV string + NS string + DB string + TB string + EV string +} + +// init initialises the key +func (k *EV) init() *EV { + return k +} + +// Copy creates a copy of the key +func (k *EV) Copy() *EV { + return &EV{ + KV: k.KV, + NS: k.NS, + DB: k.DB, + TB: k.TB, + EV: k.EV, + } +} + +// Encode encodes the key into binary +func (k *EV) Encode() []byte { + k.init() + return encode(k.KV, k.NS, "*", k.DB, "*", k.TB, "!", "e", k.EV) +} + +// Decode decodes the key from binary +func (k *EV) Decode(data []byte) { + k.init() + decode(data, &k.KV, &k.NS, &skip, &k.DB, &skip, &k.TB, &skip, &skip, &k.EV) +} + +// String returns a string representation of the key +func (k *EV) String() string { + k.init() + return output(k.KV, k.NS, "*", k.DB, "*", k.TB, "!", "e", k.EV) +} diff --git a/util/keys/keys_test.go b/util/keys/keys_test.go index ccac3abb..fa985058 100644 --- a/util/keys/keys_test.go +++ b/util/keys/keys_test.go @@ -130,6 +130,11 @@ func TestMain(t *testing.T) { obj: &TB{KV: "surreal", NS: "abcum", DB: "database", TB: "person"}, new: &TB{}, }, + { + str: "/surreal/abcum/*/database/*/person/!/e/trigger", + obj: &EV{KV: "surreal", NS: "abcum", DB: "database", TB: "person", EV: "trigger"}, + new: &EV{}, + }, { str: "/surreal/abcum/*/database/*/person/!/f/fullname", obj: &FD{KV: "surreal", NS: "abcum", DB: "database", TB: "person", FD: "fullname"},