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) }