Skip to content

Commit a2015a1

Browse files
committed
add marshal/unmarshal wrapper
1 parent 54773ee commit a2015a1

File tree

5 files changed

+34
-23
lines changed

5 files changed

+34
-23
lines changed

pkg/roles/api/auth/provider.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"go.uber.org/zap"
1515
"golang.org/x/crypto/bcrypt"
1616
"golang.org/x/oauth2"
17-
"google.golang.org/protobuf/proto"
1817
)
1918

2019
type AuthProvider struct {
@@ -79,19 +78,15 @@ func (ap *AuthProvider) CreateUser(ctx context.Context, username, password strin
7978
},
8079
},
8180
}
82-
userProto, err := proto.Marshal(&user)
83-
if err != nil {
84-
return err
85-
}
8681

87-
_, err = ap.inst.KV().Put(
82+
_, err = ap.inst.KV().PutObj(
8883
ctx,
8984
ap.inst.KV().Key(
9085
types.KeyRole,
9186
types.KeyUsers,
9287
username,
9388
).String(),
94-
string(userProto),
89+
&user,
9590
)
9691
if err != nil {
9792
return err

pkg/roles/api/auth/user.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"beryju.io/gravity/pkg/roles/api/types"
88
"go.etcd.io/etcd/api/v3/mvccpb"
99
clientv3 "go.etcd.io/etcd/client/v3"
10-
"google.golang.org/protobuf/proto"
1110
)
1211

1312
func (ap *AuthProvider) userFromKV(raw *mvccpb.KeyValue) (*types.User, error) {
@@ -17,23 +16,19 @@ func (ap *AuthProvider) userFromKV(raw *mvccpb.KeyValue) (*types.User, error) {
1716
types.KeyUsers,
1817
).Prefix(true).String()
1918
user.Username = strings.TrimPrefix(string(raw.Key), prefix)
20-
err := proto.Unmarshal(raw.Value, user)
19+
err := ap.inst.KV().Unmarshal(raw.Value, user)
2120
if err != nil {
2221
return user, err
2322
}
2423
return user, nil
2524
}
2625

2726
func (ap *AuthProvider) putUser(u *types.User, ctx context.Context, opts ...clientv3.OpOption) error {
28-
raw, err := proto.Marshal(u)
29-
if err != nil {
30-
return err
31-
}
3227
fullKey := ap.inst.KV().Key(
3328
types.KeyRole,
3429
types.KeyUsers,
3530
u.Username,
3631
).String()
37-
_, err = ap.inst.KV().Put(ctx, fullKey, string(raw), opts...)
32+
_, err := ap.inst.KV().PutObj(ctx, fullKey, u, opts...)
3833
return err
3934
}

pkg/roles/tsdb/api.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/swaggest/usecase/status"
1414
clientv3 "go.etcd.io/etcd/client/v3"
1515
"go.uber.org/zap"
16-
"google.golang.org/protobuf/proto"
1716
)
1817

1918
func (r *Role) APIMetrics() usecase.Interactor {
@@ -52,7 +51,7 @@ func (r *Role) APIMetrics() usecase.Interactor {
5251
continue
5352
}
5453
v := types.MetricsRecord{}
55-
err = proto.Unmarshal(kv.Value, &v)
54+
err = r.i.KV().Unmarshal(kv.Value, &v)
5655
if err != nil {
5756
value, err := strconv.ParseInt(string(kv.Value), 10, 0)
5857
if err != nil {

pkg/roles/tsdb/role.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/swaggest/rest/web"
2121
clientv3 "go.etcd.io/etcd/client/v3"
2222
"go.uber.org/zap"
23-
"google.golang.org/protobuf/proto"
2423
)
2524

2625
type Role struct {
@@ -170,14 +169,10 @@ func (r *Role) write(ctx context.Context) {
170169
v := types.MetricsRecord{
171170
Value: int64(value.Value),
172171
}
173-
rv, err := proto.Marshal(&v)
174-
if err != nil {
175-
r.log.Warn("failed to marshal message", zap.Error(err))
176-
}
177-
_, err = r.i.KV().Put(
172+
_, err = r.i.KV().PutObj(
178173
ks.Context(),
179174
key,
180-
string(rv),
175+
&v,
181176
clientv3.WithLease(lease.ID),
182177
)
183178
if err != nil {

pkg/storage/client.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package storage
22

33
import (
44
"context"
5+
"encoding/json"
56
"time"
67

78
"beryju.io/gravity/pkg/storage/trace"
9+
"github.com/gogo/protobuf/proto"
810
"go.uber.org/zap"
911

1012
clientv3 "go.etcd.io/etcd/client/v3"
@@ -157,3 +159,28 @@ func (c *Client) Delete(ctx context.Context, key string, opts ...clientv3.OpOpti
157159
}
158160
return res, err
159161
}
162+
163+
func (c *Client) PutObj(ctx context.Context, key string, val any, opts ...clientv3.OpOption) (*clientv3.PutResponse, error) {
164+
marshalled, err := c.Marshal(val)
165+
if err != nil {
166+
return nil, err
167+
}
168+
return c.Put(ctx, key, string(marshalled), opts...)
169+
}
170+
171+
func (c *Client) Unmarshal(raw []byte, out any) error {
172+
err := json.Unmarshal(raw, out)
173+
if err != nil {
174+
if p, ok := out.(proto.Message); ok {
175+
return proto.Unmarshal(raw, p)
176+
}
177+
}
178+
return err
179+
}
180+
181+
func (c *Client) Marshal(in any) ([]byte, error) {
182+
if p, ok := in.(proto.Message); ok {
183+
return proto.Marshal(p)
184+
}
185+
return json.Marshal(in)
186+
}

0 commit comments

Comments
 (0)