forked from TrueCloudLab/frostfs-api-go
[#230] pkg: Implement string encode/decode methods on Checksum
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
6861de042b
commit
0f04087543
2 changed files with 42 additions and 0 deletions
|
@ -3,8 +3,10 @@ package pkg
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Checksum represents v2-compatible checksum.
|
// Checksum represents v2-compatible checksum.
|
||||||
|
@ -109,3 +111,35 @@ func (c *Checksum) UnmarshalJSON(data []byte) error {
|
||||||
return (*refs.Checksum)(c).
|
return (*refs.Checksum)(c).
|
||||||
UnmarshalJSON(data)
|
UnmarshalJSON(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Checksum) String() string {
|
||||||
|
return hex.EncodeToString(
|
||||||
|
(*refs.Checksum)(c).
|
||||||
|
GetSum(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse parses Checksum from its string representation.
|
||||||
|
func (c *Checksum) Parse(s string) error {
|
||||||
|
data, err := hex.DecodeString(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var typ refs.ChecksumType
|
||||||
|
|
||||||
|
switch ln := len(data); ln {
|
||||||
|
default:
|
||||||
|
return errors.Errorf("unsupported checksum length %d", ln)
|
||||||
|
case sha256.Size:
|
||||||
|
typ = refs.SHA256
|
||||||
|
case 64:
|
||||||
|
typ = refs.TillichZemor
|
||||||
|
}
|
||||||
|
|
||||||
|
cV2 := (*refs.Checksum)(c)
|
||||||
|
cV2.SetType(typ)
|
||||||
|
cV2.SetSum(data)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -90,4 +90,12 @@ func TestChecksumEncoding(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, cs, cs2)
|
require.Equal(t, cs, cs2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("string", func(t *testing.T) {
|
||||||
|
cs2 := NewChecksum()
|
||||||
|
|
||||||
|
require.NoError(t, cs2.Parse(cs.String()))
|
||||||
|
|
||||||
|
require.Equal(t, cs, cs2)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue