Airat Arifullin
32a975a20d
* Introduce `Chain`, `ChainTarget` and `TargetType`. * Implement api-v2 converters for the introduced types. * Add unit-tests. Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package apemanager
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
apemanager_v2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
|
|
)
|
|
|
|
var (
|
|
ErrInvalidChainRepresentation = errors.New("invalid chain representation")
|
|
)
|
|
|
|
// ChainID is Chain's identifier.
|
|
type ChainID []byte
|
|
|
|
// Chain is an SDK representation for v2's Chain.
|
|
//
|
|
// Note that Chain (as well as v2's Chain) and all related entities
|
|
// are NOT operated by Access-Policy-Engine (APE). The client is responsible
|
|
// to convert these types to policy-engine entities.
|
|
type Chain struct {
|
|
// Raw is the encoded chain kind.
|
|
// It assumes that Raw's bytes are the result of encoding provided by
|
|
// policy-engine package.
|
|
Raw []byte
|
|
}
|
|
|
|
// ToV2 converts Chain to v2.
|
|
func (c *Chain) ToV2() *apemanager_v2.Chain {
|
|
v2ct := new(apemanager_v2.Chain)
|
|
|
|
if c.Raw != nil {
|
|
v2Raw := new(apemanager_v2.ChainRaw)
|
|
v2Raw.SetRaw(c.Raw)
|
|
v2ct.SetKind(v2Raw)
|
|
}
|
|
|
|
return v2ct
|
|
}
|
|
|
|
// ReadFromV2 fills Chain from v2.
|
|
func (c *Chain) ReadFromV2(v2ct *apemanager_v2.Chain) error {
|
|
switch v := v2ct.GetKind().(type) {
|
|
default:
|
|
return fmt.Errorf("unsupported chain kind: %T", v)
|
|
case *apemanager_v2.ChainRaw:
|
|
raw := v.GetRaw()
|
|
c.Raw = raw
|
|
}
|
|
return nil
|
|
}
|