From 2c84ffddc388aa12157e9b856fc5434d79763691 Mon Sep 17 00:00:00 2001 From: Hunk Zhu Date: Sun, 17 May 2026 10:24:35 +0800 Subject: [PATCH] add test for gconv uuid convert --- util/gconv/gconv_z_unit_uuid_test.go | 123 +++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 util/gconv/gconv_z_unit_uuid_test.go diff --git a/util/gconv/gconv_z_unit_uuid_test.go b/util/gconv/gconv_z_unit_uuid_test.go new file mode 100644 index 000000000..20d1cd918 --- /dev/null +++ b/util/gconv/gconv_z_unit_uuid_test.go @@ -0,0 +1,123 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gconv_test + +import ( + "reflect" + "testing" + + "github.com/gogf/gf/v2/container/gvar" + "github.com/gogf/gf/v2/test/gtest" + "github.com/gogf/gf/v2/util/gconv" + "github.com/google/uuid" +) + +func TestBsToUUID(t *testing.T) { + + gtest.C(t, func(t *gtest.T) { + err := initConverter() + t.Assert(err, nil) + v, _ := uuid.NewV7() + b := v[:] + var u uuid.UUID + + err = gconv.Scan(v, &u) + t.Assert(err, nil) + t.Assert(v, u) + + err = gconv.Scan(b, &u) + t.Assert(err, nil) + t.Assert(v, u) + + }) +} + +func TestUUIDToBS(t *testing.T) { + + gtest.C(t, func(t *gtest.T) { + err := initConverter() + t.Assert(err, nil) + v, _ := uuid.NewV7() + + var bs []byte + err = gconv.Scan(v, &bs) + + t.Assert(err, nil) + t.Assert(v[:], bs) + + var u [16]byte + + err = gconv.Scan(v, &u) + t.Assert(err, nil) + t.Assert([16]byte(v), u) + }) +} + +func initConverter() (err error) { + for _, fn := range []any{ + convBsToUUID, + convStrToUUID, + convUUIDToBs, + convUUIDToStr, + convGvarToUUID, + convUUIDToArray, + } { + if err = gconv.RegisterTypeConverterFunc(fn); err != nil { + return + } + } + return +} + +func convAnyToUUID(in any, out reflect.Value) (err error) { + if _, ok := out.Interface().(*uuid.UUID); ok { + bs := gconv.Bytes(in) + var u *uuid.UUID + u, err = convBsToUUID(bs) + if err != nil { + return + } + out.Elem().Set(reflect.ValueOf(*u)) + } + return +} + +func convGvarToUUID(v gvar.Var) (u *uuid.UUID, err error) { + return convBsToUUID(v.Bytes()) +} + +func convBsToUUID(bs []byte) (uid *uuid.UUID, err error) { + uid = new(uuid.UUID) + if len(bs) == 16 { + *uid, err = uuid.FromBytes(bs) + } else { + *uid, err = uuid.ParseBytes(bs) + } + return +} + +func convUUIDToArray(uid uuid.UUID) (bs *[16]byte, err error) { + bs = new([16]byte) + *bs = uid + return +} + +func convUUIDToBs(uid uuid.UUID) (bs *[]byte, err error) { + bs = new([]byte) + *bs = uid[:] + return +} + +func convUUIDToStr(uid uuid.UUID) (str *string, err error) { + str = new(string) + *str = uid.String() + return +} + +func convStrToUUID(str string) (uid *uuid.UUID, err error) { + return convBsToUUID([]byte(str)) +}