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