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