Skip to content

Commit

Permalink
coreapi: block: move option logic to options package
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: Łukasz Magiera <[email protected]>
  • Loading branch information
magik6k authored and Stebalien committed Aug 27, 2018
1 parent 9b925e0 commit 1f98f4b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 39 deletions.
35 changes: 1 addition & 34 deletions core/coreapi/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@ import (
"bytes"
"context"
"errors"
"fmt"
"io"
"io/ioutil"

util "github.com/ipfs/go-ipfs/blocks/blockstoreutil"
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
caopts "github.com/ipfs/go-ipfs/core/coreapi/interface/options"

mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
blocks "gx/ipfs/QmWAzSEoqZ6xU6pu8yL8e5WaMb7wtbfbhhN4p1DknUPtr3/go-block-format"
cid "gx/ipfs/QmZFbDTY9jfSBms2MchvYM9oYRbAF19K7Pby47yDBfpPrb/go-cid"
)
Expand All @@ -25,7 +23,7 @@ type BlockStat struct {
}

func (api *BlockAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.BlockPutOption) (coreiface.BlockStat, error) {
settings, err := caopts.BlockPutOptions(opts...)
_, pref, err := caopts.BlockPutOptions(opts...)
if err != nil {
return nil, err
}
Expand All @@ -35,37 +33,6 @@ func (api *BlockAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Bloc
return nil, err
}

var pref cid.Prefix
pref.Version = 1

if settings.Codec == "" {
if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
settings.Codec = "protobuf"
} else {
settings.Codec = "v0"
}
}

formatval, ok := cid.Codecs[settings.Codec]
if !ok {
return nil, fmt.Errorf("unrecognized format: %s", settings.Codec)
}

if settings.Codec == "v0" && settings.MhType == mh.SHA2_256 {
pref.Version = 0
}

if settings.Codec == "v0" {
if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
return nil, fmt.Errorf("only sha2-255-32 is allowed with CIDv0")
}
}

pref.Codec = formatval

pref.MhType = settings.MhType
pref.MhLength = settings.MhLength

bcid, err := pref.Sum(data)
if err != nil {
return nil, err
Expand Down
44 changes: 39 additions & 5 deletions core/coreapi/interface/options/block.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package options

import (
"gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
"fmt"
mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
cid "gx/ipfs/QmZFbDTY9jfSBms2MchvYM9oYRbAF19K7Pby47yDBfpPrb/go-cid"
)

type BlockPutSettings struct {
Expand All @@ -17,20 +19,52 @@ type BlockRmSettings struct {
type BlockPutOption func(*BlockPutSettings) error
type BlockRmOption func(*BlockRmSettings) error

func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, error) {
func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, cid.Prefix, error) {
options := &BlockPutSettings{
Codec: "",
MhType: multihash.SHA2_256,
MhType: mh.SHA2_256,
MhLength: -1,
}

for _, opt := range opts {
err := opt(options)
if err != nil {
return nil, err
return nil, cid.Prefix{}, err
}
}
return options, nil

var pref cid.Prefix
pref.Version = 1

if options.Codec == "" {
if options.MhType != mh.SHA2_256 || (options.MhLength != -1 && options.MhLength != 32) {
options.Codec = "protobuf"
} else {
options.Codec = "v0"
}
}

if options.Codec == "v0" && options.MhType == mh.SHA2_256 {
pref.Version = 0
}

formatval, ok := cid.Codecs[options.Codec]
if !ok {
return nil, cid.Prefix{}, fmt.Errorf("unrecognized format: %s", options.Codec)
}

if options.Codec == "v0" {
if options.MhType != mh.SHA2_256 || (options.MhLength != -1 && options.MhLength != 32) {
return nil, cid.Prefix{}, fmt.Errorf("only sha2-255-32 is allowed with CIDv0")
}
}

pref.Codec = formatval

pref.MhType = options.MhType
pref.MhLength = options.MhLength

return options, pref, nil
}

func BlockRmOptions(opts ...BlockRmOption) (*BlockRmSettings, error) {
Expand Down

0 comments on commit 1f98f4b

Please sign in to comment.