File tree Expand file tree Collapse file tree 8 files changed +545
-2
lines changed Expand file tree Collapse file tree 8 files changed +545
-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+ return * o .val , true
25+ }
26+
27+ func (o GenericOverPtr [T ]) IsSome () bool {
28+ return o .val != nil
29+ }
30+
31+ func (o GenericOverPtr [T ]) EncodeMsgpack (encoder * msgpack.Encoder ) error {
32+ if ! o .IsSome () {
33+ return encoder .EncodeNil ()
34+ }
35+ return encoder .Encode (* o .val )
36+ }
37+
38+ func (o * GenericOverPtr [T ]) DecodeMsgpack (decoder * msgpack.Decoder ) error {
39+ code , err := decoder .PeekCode ()
40+ switch {
41+ case err != nil :
42+ return err
43+ case code == msgpcode .Nil :
44+ o .val = nil
45+ return nil
46+ }
47+
48+ var val T
49+ err = decoder .Decode (& val )
50+ if err != nil {
51+ return err
52+ }
53+ o .val = & val
54+
55+ return nil
56+ }
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+ return o [0 ], true
23+ }
24+
25+ func (o GenericOverSlice [T ]) IsSome () bool {
26+ return len (o ) > 0
27+ }
28+
29+ func (o GenericOverSlice [T ]) EncodeMsgpack (encoder * msgpack.Encoder ) error {
30+ if ! o .IsSome () {
31+ return encoder .EncodeNil ()
32+ }
33+ return encoder .Encode (o [0 ])
34+ }
35+
36+ func (o * GenericOverSlice [T ]) DecodeMsgpack (decoder * msgpack.Decoder ) error {
37+ code , err := decoder .PeekCode ()
38+ if err != nil {
39+ return err
40+ }
41+ if code == msgpcode .Nil {
42+ * o = nil
43+ return nil
44+ }
45+
46+ var val T
47+ err = decoder .Decode (& val )
48+ if err != nil {
49+ return err
50+ }
51+ * o = []T {val }
52+
53+ return nil
54+ }
You can’t perform that action at this time.
0 commit comments