Compare commits

...

3 Commits
v0.1.1 ... main

Author SHA1 Message Date
Yavolte b35a655414 update map 2025-08-12 11:33:53 +08:00
Yavolte c072eac417 添加对泛型MAP的支持 2025-08-11 11:38:23 +08:00
Yavolte 24ad759c50 add rest condition field 2025-07-24 16:26:36 +08:00
3 changed files with 84 additions and 2 deletions

View File

@ -0,0 +1,72 @@
package maps
import "sync"
type Map[K comparable, V any] struct {
m *sync.Map
}
func (gm *Map[K, V]) Store(key K, value V) {
gm.m.Store(key, value)
}
func (gm *Map[K, V]) Load(key K) (V, bool) {
value, ok := gm.m.Load(key)
if !ok {
var zero V
return zero, false
}
return value.(V), true
}
func (gm *Map[K, V]) Delete(key K) {
gm.m.Delete(key)
}
func (gm *Map[K, V]) Range(f func(key K, value V) bool) {
gm.m.Range(func(key, value any) bool {
return f(key.(K), value.(V))
})
}
func (gm *Map[K, V]) Swap(key K, value V) (previous V, loaded bool) {
actual, swapped := gm.m.Swap(key, value)
return actual.(V), swapped
}
func (gm *Map[K, V]) Len() int {
var n int
gm.m.Range(func(key, value any) bool {
n++
return true
})
return n
}
func (gm *Map[K, V]) Clear() {
gm.m.Clear()
}
func (gm *Map[K, V]) LoadOrStore(key K, value V) (V, bool) {
actual, loaded := gm.m.LoadOrStore(key, value)
return actual.(V), loaded
}
func (gm *Map[K, V]) LoadAndDelete(key K) (value V, loaded bool) {
actual, loaded := gm.m.LoadAndDelete(key)
return actual.(V), loaded
}
func (gm *Map[K, V]) CompareAndSwap(key K, old V, new V) (swapped bool) {
return gm.m.CompareAndSwap(key, old, new)
}
func (gm *Map[K, V]) CompareAndDelete(key K, old V) (deleted bool) {
return gm.m.CompareAndDelete(key, old)
}
func New[K comparable, V any]() *Map[K, V] {
return &Map[K, V]{
m: new(sync.Map),
}
}

View File

@ -41,6 +41,7 @@ type RestFieldOptions struct {
Description string `protobuf:"bytes,15,opt,name=description,proto3" json:"description,omitempty"`
Readonly string `protobuf:"bytes,16,opt,name=readonly,proto3" json:"readonly,omitempty"`
Endofnow string `protobuf:"bytes,17,opt,name=endofnow,proto3" json:"endofnow,omitempty"`
Condition string `protobuf:"bytes,18,opt,name=condition,proto3" json:"condition,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -194,6 +195,13 @@ func (x *RestFieldOptions) GetEndofnow() string {
return ""
}
func (x *RestFieldOptions) GetCondition() string {
if x != nil {
return x.Condition
}
return ""
}
type RestMessageOptions struct {
state protoimpl.MessageState `protogen:"open.v1"`
Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"`
@ -278,7 +286,7 @@ var File_rest_proto protoreflect.FileDescriptor
const file_rest_proto_rawDesc = "" +
"\n" +
"\n" +
"rest.proto\x12\x04aeus\x1a google/protobuf/descriptor.proto\"\xc6\x03\n" +
"rest.proto\x12\x04aeus\x1a google/protobuf/descriptor.proto\"\xe4\x03\n" +
"\x10RestFieldOptions\x12\x12\n" +
"\x04gorm\x18\x01 \x01(\tR\x04gorm\x12\x18\n" +
"\acomment\x18\x02 \x01(\tR\acomment\x12\x1c\n" +
@ -297,7 +305,8 @@ const file_rest_proto_rawDesc = "" +
"\tuploaduri\x18\x0e \x01(\tR\tuploaduri\x12 \n" +
"\vdescription\x18\x0f \x01(\tR\vdescription\x12\x1a\n" +
"\breadonly\x18\x10 \x01(\tR\breadonly\x12\x1a\n" +
"\bendofnow\x18\x11 \x01(\tR\bendofnow\"*\n" +
"\bendofnow\x18\x11 \x01(\tR\bendofnow\x12\x1c\n" +
"\tcondition\x18\x12 \x01(\tR\tcondition\"*\n" +
"\x12RestMessageOptions\x12\x14\n" +
"\x05table\x18\x01 \x01(\tR\x05table:M\n" +
"\x05field\x12\x1d.google.protobuf.FieldOptions\x18\x96\x97\x03 \x01(\v2\x16.aeus.RestFieldOptionsR\x05field:O\n" +

View File

@ -31,6 +31,7 @@ message RestFieldOptions {
string description = 15;
string readonly = 16;
string endofnow = 17;
string condition = 18;
}
extend google.protobuf.MessageOptions {