github.com/LagrangeDev/LagrangeGo@v0.0.0-20240512064304-ad4a85e10cb4/internal/proto/wrapper.go (about) 1 package proto 2 3 // from https://github.com/Mrs4s/MiraiGo/blob/master/internal/proto/wrapper.go 4 5 import ( 6 "reflect" 7 8 "github.com/RomiChan/protobuf/proto" 9 ) 10 11 // TODO: move to a new package 12 const debug = false 13 14 type Message = any 15 16 func Marshal(m Message) ([]byte, error) { 17 b, err := proto.Marshal(m) 18 if err != nil { 19 return b, err 20 } 21 if debug { 22 t := reflect.TypeOf(m).Elem() 23 n := reflect.New(t) 24 err = Unmarshal(b, n.Interface()) 25 if err != nil { 26 panic(err) 27 } 28 if reflect.DeepEqual(m, n) { 29 panic("not equal") 30 } 31 } 32 return b, err 33 } 34 35 func Unmarshal(b []byte, m Message) error { 36 return proto.Unmarshal(b, m) 37 } 38 39 func Some[T any](val T) proto.Option[T] { 40 return proto.Some(val) 41 } 42 43 func None[T any]() proto.Option[T] { 44 return proto.None[T]() 45 } 46 47 // Bool stores v in a new bool value and returns a pointer to it. 48 func Bool(v bool) proto.Option[bool] { return proto.Some(v) } 49 50 // Int32 stores v in a new int32 value and returns a pointer to it. 51 func Int32(v int32) proto.Option[int32] { return proto.Some(v) } 52 53 // Int64 stores v in a new int64 value and returns a pointer to it. 54 func Int64(v int64) proto.Option[int64] { return proto.Some(v) } 55 56 // Float32 stores v in a new float32 value and returns a pointer to it. 57 func Float32(v float32) proto.Option[float32] { return proto.Some(v) } 58 59 // Float64 stores v in a new float64 value and returns a pointer to it. 60 func Float64(v float64) proto.Option[float64] { return proto.Some(v) } 61 62 // Uint32 stores v in a new uint32 value and returns a pointer to it. 63 func Uint32(v uint32) proto.Option[uint32] { return proto.Some(v) } 64 65 // Uint64 stores v in a new uint64 value and returns a pointer to it. 66 func Uint64(v uint64) proto.Option[uint64] { return proto.Some(v) } 67 68 // String stores v in a new string value and returns a pointer to it. 69 func String(v string) proto.Option[string] { return proto.Some(v) }