// Copyright (C) 2019 Storj Labs, Inc. // See LICENSE for copying information. package internalpb import ( "database/sql/driver" proto "github.com/gogo/protobuf/proto" "github.com/zeebo/errs" "storj.io/common/pb" ) var scanError = errs.Class("Protobuf Scanner") var valueError = errs.Class("Protobuf Valuer") // scan automatically converts database []byte to proto.Messages. func scan(msg proto.Message, value interface{}) error { bytes, ok := value.([]byte) if !ok { return scanError.New("%t was %t, expected []bytes", msg, value) } return scanError.Wrap(pb.Unmarshal(bytes, msg)) } // value automatically converts proto.Messages to database []byte. func value(msg proto.Message) (driver.Value, error) { value, err := pb.Marshal(msg) return value, valueError.Wrap(err) } // Scan implements the Scanner interface. func (n *InjuredSegment) Scan(value interface{}) error { return scan(n, value) } // Value implements the driver Valuer interface. func (n InjuredSegment) Value() (driver.Value, error) { return value(&n) }