Skip to content

Commit 2d1bccb

Browse files
committed
rpcserver: simplify other unmarshal funcs
1 parent 0244aa3 commit 2d1bccb

File tree

1 file changed

+68
-59
lines changed

1 file changed

+68
-59
lines changed

rpcserver.go

Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -4665,63 +4665,57 @@ func UnmarshalUniID(rpcID *unirpc.ID) (universe.Identifier, error) {
46654665
return universe.Identifier{}, fmt.Errorf("unable to unmarshal "+
46664666
"proof type: %w", err)
46674667
}
4668+
4669+
var (
4670+
assetIDBytes []byte
4671+
groupKeyBytes []byte
4672+
)
4673+
46684674
switch {
46694675
case rpcID.GetAssetId() != nil:
4670-
rpcAssetID := rpcID.GetAssetId()
4671-
if len(rpcAssetID) != sha256.Size {
4676+
assetIDBytes = rpcID.GetAssetId()
4677+
if len(assetIDBytes) != sha256.Size {
46724678
return universe.Identifier{}, fmt.Errorf("asset ID " +
46734679
"must be 32 bytes")
46744680
}
46754681

4676-
var assetID asset.ID
4677-
copy(assetID[:], rpcAssetID)
4678-
4679-
return universe.Identifier{
4680-
AssetID: assetID,
4681-
ProofType: proofType,
4682-
}, nil
4683-
46844682
case rpcID.GetAssetIdStr() != "":
46854683
rpcAssetIDStr := rpcID.GetAssetIdStr()
46864684
if len(rpcAssetIDStr) != sha256.Size*2 {
4687-
return universe.Identifier{}, fmt.Errorf("asset ID string " +
4688-
"must be 64 bytes")
4685+
return universe.Identifier{}, fmt.Errorf("asset ID " +
4686+
"string must be 64 chars")
46894687
}
46904688

4691-
assetIDBytes, err := hex.DecodeString(rpcAssetIDStr)
4689+
assetIDBytes, err = hex.DecodeString(rpcAssetIDStr)
46924690
if err != nil {
46934691
return universe.Identifier{}, err
46944692
}
46954693

4696-
// TODO(roasbeef): reuse with above
4697-
4698-
var assetID asset.ID
4699-
copy(assetID[:], assetIDBytes)
4700-
4701-
return universe.Identifier{
4702-
AssetID: assetID,
4703-
ProofType: proofType,
4704-
}, nil
4705-
47064694
case rpcID.GetGroupKey() != nil:
4707-
groupKey, err := parseUserKey(rpcID.GetGroupKey())
4695+
groupKeyBytes = rpcID.GetGroupKey()
4696+
4697+
case rpcID.GetGroupKeyStr() != "":
4698+
rpcGroupKeyStr := rpcID.GetGroupKeyStr()
4699+
groupKeyBytes, err = hex.DecodeString(rpcGroupKeyStr)
47084700
if err != nil {
47094701
return universe.Identifier{}, err
47104702
}
47114703

4704+
default:
4705+
return universe.Identifier{}, fmt.Errorf("no id set")
4706+
}
4707+
4708+
switch {
4709+
case len(assetIDBytes) != 0:
4710+
var assetID asset.ID
4711+
copy(assetID[:], assetIDBytes)
4712+
47124713
return universe.Identifier{
4713-
GroupKey: groupKey,
4714+
AssetID: assetID,
47144715
ProofType: proofType,
47154716
}, nil
47164717

4717-
case rpcID.GetGroupKeyStr() != "":
4718-
groupKeyBytes, err := hex.DecodeString(rpcID.GetGroupKeyStr())
4719-
if err != nil {
4720-
return universe.Identifier{}, err
4721-
}
4722-
4723-
// TODO(roasbeef): reuse with above
4724-
4718+
case len(groupKeyBytes) != 0:
47254719
groupKey, err := parseUserKey(groupKeyBytes)
47264720
if err != nil {
47274721
return universe.Identifier{}, err
@@ -4733,7 +4727,7 @@ func UnmarshalUniID(rpcID *unirpc.ID) (universe.Identifier, error) {
47334727
}, nil
47344728

47354729
default:
4736-
return universe.Identifier{}, fmt.Errorf("no id set")
4730+
return universe.Identifier{}, fmt.Errorf("malformed id")
47374731
}
47384732
}
47394733

@@ -5338,6 +5332,10 @@ func unmarshalUniverseKey(key *unirpc.UniverseKey) (universe.Identifier,
53385332

53395333
// unmarshalAssetLeaf unmarshals an asset leaf from the RPC form.
53405334
func unmarshalAssetLeaf(leaf *unirpc.AssetLeaf) (*universe.Leaf, error) {
5335+
if leaf == nil {
5336+
return nil, fmt.Errorf("missing asset leaf")
5337+
}
5338+
53415339
// We'll just pull the asset details from the serialized issuance proof
53425340
// itself.
53435341
var proofAsset asset.Asset
@@ -5368,6 +5366,10 @@ func unmarshalAssetLeaf(leaf *unirpc.AssetLeaf) (*universe.Leaf, error) {
53685366
func (r *rpcServer) InsertProof(ctx context.Context,
53695367
req *unirpc.AssetProof) (*unirpc.AssetProofResponse, error) {
53705368

5369+
if req == nil {
5370+
return nil, fmt.Errorf("missing proof and universe key")
5371+
}
5372+
53715373
universeID, leafKey, err := unmarshalUniverseKey(req.Key)
53725374
if err != nil {
53735375
return nil, err
@@ -6193,64 +6195,71 @@ func unmarshalAssetSpecifier(req *rfqrpc.AssetSpecifier) (*asset.ID,
61936195
// give precedence to the asset ID due to its higher level of
61946196
// specificity.
61956197
var (
6196-
assetID *asset.ID
6197-
6198+
assetIDBytes []byte
6199+
assetID *asset.ID
61986200
groupKeyBytes []byte
61996201
groupKey *btcec.PublicKey
6200-
6201-
err error
6202+
err error
62026203
)
62036204

62046205
switch {
62056206
// Parse the asset ID if it's set.
62066207
case len(req.GetAssetId()) > 0:
6207-
var assetIdBytes [32]byte
6208-
copy(assetIdBytes[:], req.GetAssetId())
6209-
id := asset.ID(assetIdBytes)
6210-
assetID = &id
6208+
assetIDBytes = req.GetAssetId()
6209+
if len(assetIDBytes) != sha256.Size {
6210+
return nil, nil, fmt.Errorf("asset ID must be 32 bytes")
6211+
}
62116212

62126213
case len(req.GetAssetIdStr()) > 0:
6213-
assetIDBytes, err := hex.DecodeString(req.GetAssetIdStr())
6214+
reqAssetIDStr := req.GetAssetIdStr()
6215+
if len(reqAssetIDStr) != sha256.Size*2 {
6216+
return nil, nil, fmt.Errorf("asset ID string must be " +
6217+
"64 chars")
6218+
}
6219+
6220+
assetIDBytes, err = hex.DecodeString(reqAssetIDStr)
62146221
if err != nil {
62156222
return nil, nil, fmt.Errorf("error decoding asset "+
62166223
"ID: %w", err)
62176224
}
62186225

6219-
var id asset.ID
6220-
copy(id[:], assetIDBytes)
6221-
assetID = &id
6222-
62236226
// Parse the group key if it's set.
62246227
case len(req.GetGroupKey()) > 0:
62256228
groupKeyBytes = req.GetGroupKey()
6226-
groupKey, err = btcec.ParsePubKey(groupKeyBytes)
6227-
if err != nil {
6228-
return nil, nil, fmt.Errorf("error parsing group "+
6229-
"key: %w", err)
6230-
}
62316229

62326230
case len(req.GetGroupKeyStr()) > 0:
6233-
groupKeyBytes, err := hex.DecodeString(
6231+
groupKeyBytes, err = hex.DecodeString(
62346232
req.GetGroupKeyStr(),
62356233
)
62366234
if err != nil {
62376235
return nil, nil, fmt.Errorf("error decoding group "+
62386236
"key: %w", err)
62396237
}
62406238

6241-
groupKey, err = btcec.ParsePubKey(groupKeyBytes)
6242-
if err != nil {
6243-
return nil, nil, fmt.Errorf("error parsing group "+
6244-
"key: %w", err)
6245-
}
6246-
62476239
default:
62486240
// At this point, we know that neither the asset ID nor the
62496241
// group key are specified. Return an error.
62506242
return nil, nil, fmt.Errorf("either asset ID or asset group " +
62516243
"key must be specified")
62526244
}
62536245

6246+
switch {
6247+
case len(assetIDBytes) != 0:
6248+
var id asset.ID
6249+
copy(id[:], assetIDBytes)
6250+
assetID = &id
6251+
6252+
case len(groupKeyBytes) != 0:
6253+
groupKey, err = parseUserKey(groupKeyBytes)
6254+
if err != nil {
6255+
return nil, nil, fmt.Errorf("error parsing group "+
6256+
"key: group key: %w", err)
6257+
}
6258+
6259+
default:
6260+
return nil, nil, fmt.Errorf("malformed asset specifier")
6261+
}
6262+
62546263
return assetID, groupKey, nil
62556264
}
62566265

0 commit comments

Comments
 (0)