This is an automated email from the ASF dual-hosted git repository.

tokers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new f5ee17f  feat: add pkg idgen (#188)
f5ee17f is described below

commit f5ee17fcabcaac24e70f6f3a24a2bd77099076de
Author: Alex Zhang <[email protected]>
AuthorDate: Wed Jan 20 18:00:42 2021 +0800

    feat: add pkg idgen (#188)
---
 pkg/id/idgen.go      | 39 +++++++++++++++++++++++++++++++++++++++
 pkg/id/idgen_test.go | 30 ++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git a/pkg/id/idgen.go b/pkg/id/idgen.go
new file mode 100644
index 0000000..1999064
--- /dev/null
+++ b/pkg/id/idgen.go
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 id
+
+import (
+       "fmt"
+       "hash/crc32"
+       "reflect"
+       "unsafe"
+)
+
+// GenID generates an ID according to the raw material.
+func GenID(raw string) string {
+       if raw == "" {
+               return ""
+       }
+       sh := &reflect.SliceHeader{
+               Data: (*reflect.StringHeader)(unsafe.Pointer(&raw)).Data,
+               Len:  len(raw),
+               Cap:  len(raw),
+       }
+       p := *(*[]byte)(unsafe.Pointer(sh))
+
+       res := crc32.ChecksumIEEE(p)
+       return fmt.Sprintf("%x", res)
+}
diff --git a/pkg/id/idgen_test.go b/pkg/id/idgen_test.go
new file mode 100644
index 0000000..27c04f9
--- /dev/null
+++ b/pkg/id/idgen_test.go
@@ -0,0 +1,30 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 id
+
+import (
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+)
+
+func TestGenID(t *testing.T) {
+       hash := GenID("")
+       assert.Len(t, hash, 0)
+
+       assert.Equal(t, GenID("111"), GenID("111"))
+       assert.NotEqual(t, GenID("112"), GenID("111"))
+}

Reply via email to