File tree Expand file tree Collapse file tree 8 files changed +564
-2
lines changed Expand file tree Collapse file tree 8 files changed +564
-2
lines changed Original file line number Diff line number Diff line change @@ -51,10 +51,18 @@ jobs:
5151 run : make coverage coveralls-deps coveralls
5252
5353 run-benchmarks :
54- if : false
54+ if : (github.event_name == 'push') ||
55+ (github.event_name == 'pull_request' &&
56+ github.event.pull_request.head.repo.full_name != github.repository) ||
57+ (github.event_name == 'workflow_dispatch')
5558
5659 runs-on : ubuntu-latest
5760
61+ strategy :
62+ fail-fast : false
63+ matrix :
64+ golang : ['1.24', 'stable']
65+
5866 steps :
5967 - uses : actions/checkout@v4
6068 - uses : actions/setup-go@v5
Original file line number Diff line number Diff line change @@ -17,6 +17,11 @@ testrace:
1717 @echo " Running tests with race flag"
1818 @go test ./... -count=100 -race
1919
20+ .PHONY : bench
21+ bench :
22+ @echo " Running benchmarks"
23+ @go test ./... -count=1 -bench=. -benchmem
24+
2025.PHONY : coverage
2126coverage :
2227 @echo " Running tests with coveralls"
Original file line number Diff line number Diff line change 1+ package option_test
2+
3+ import (
4+ "github.com/vmihailenco/msgpack/v5"
5+ "github.com/vmihailenco/msgpack/v5/msgpcode"
6+ )
7+
8+ type GenericOverPtr [T any ] struct {
9+ val * T
10+ }
11+
12+ func SomeOverPtr [T any ](value T ) GenericOverPtr [T ] {
13+ return GenericOverPtr [T ]{val : & value }
14+ }
15+
16+ func NoneOverPtr [T any ]() GenericOverPtr [T ] {
17+ return GenericOverPtr [T ]{val : nil }
18+ }
19+
20+ func (o GenericOverPtr [T ]) Get () (T , bool ) {
21+ if o .val == nil {
22+ return zero [T ](), false
23+ }
24+
25+ return * o .val , true
26+ }
27+
28+ func (o GenericOverPtr [T ]) IsSome () bool {
29+ return o .val != nil
30+ }
31+
32+ func (o GenericOverPtr [T ]) EncodeMsgpack (encoder * msgpack.Encoder ) error {
33+ if ! o .IsSome () {
34+ return encoder .EncodeNil ()
35+ }
36+
37+ return encoder .Encode (* o .val )
38+ }
39+
40+ func (o * GenericOverPtr [T ]) DecodeMsgpack (decoder * msgpack.Decoder ) error {
41+ code , err := decoder .PeekCode ()
42+ switch {
43+ case err != nil :
44+ return err
45+ case code == msgpcode .Nil :
46+ o .val = nil
47+ return nil
48+ }
49+
50+ var val T
51+
52+ err = decoder .Decode (& val )
53+ if err != nil {
54+ return err
55+ }
56+
57+ o .val = & val
58+
59+ return nil
60+ }
Original file line number Diff line number Diff line change 1+ package option_test
2+
3+ import (
4+ "github.com/vmihailenco/msgpack/v5"
5+ "github.com/vmihailenco/msgpack/v5/msgpcode"
6+ )
7+
8+ type GenericOverSlice [T any ] []T
9+
10+ func SomeOverSlice [T any ](value T ) GenericOverSlice [T ] {
11+ return []T {value }
12+ }
13+
14+ func NoneOverSlice [T any ]() GenericOverSlice [T ] {
15+ return []T {}
16+ }
17+
18+ func (o GenericOverSlice [T ]) Get () (T , bool ) {
19+ if len (o ) == 0 {
20+ return zero [T ](), false
21+ }
22+
23+ return o [0 ], true
24+ }
25+
26+ func (o GenericOverSlice [T ]) IsSome () bool {
27+ return len (o ) > 0
28+ }
29+
30+ func (o GenericOverSlice [T ]) EncodeMsgpack (encoder * msgpack.Encoder ) error {
31+ if ! o .IsSome () {
32+ return encoder .EncodeNil ()
33+ }
34+ return encoder .Encode (o [0 ])
35+ }
36+
37+ func (o * GenericOverSlice [T ]) DecodeMsgpack (decoder * msgpack.Decoder ) error {
38+ code , err := decoder .PeekCode ()
39+ if err != nil {
40+ return err
41+ }
42+
43+ if code == msgpcode .Nil {
44+ * o = nil
45+ return nil
46+ }
47+
48+ var val T
49+
50+ err = decoder .Decode (& val )
51+ if err != nil {
52+ return err
53+ }
54+ * o = []T {val }
55+
56+ return nil
57+ }
You can’t perform that action at this time.
0 commit comments