generated from TrueCloudLab/basic
57 lines
1 KiB
Go
57 lines
1 KiB
Go
|
package output
|
||
|
|
||
|
import (
|
||
|
"encoding/base64"
|
||
|
|
||
|
apechain "git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain"
|
||
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||
|
"github.com/spf13/cobra"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
minPrintable = 32
|
||
|
maxPrintable = 127
|
||
|
)
|
||
|
|
||
|
func PrintChains(cmd *cobra.Command, list []stackitem.Item, decodeChain, decodeID bool) error {
|
||
|
for _, item := range list {
|
||
|
bytes, err := item.TryBytes()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if !decodeChain {
|
||
|
cmd.Println(string(bytes))
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
var chain apechain.Chain
|
||
|
if err = chain.DecodeBytes(bytes); err != nil {
|
||
|
cmd.PrintErrf("invalid chain format: %s\n", base64.StdEncoding.EncodeToString(bytes))
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
raw, err := chain.MarshalJSON()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if decodeID {
|
||
|
var printableID string
|
||
|
|
||
|
for _, r := range string(chain.ID) {
|
||
|
if minPrintable <= r && r <= maxPrintable {
|
||
|
printableID += string(r)
|
||
|
} else {
|
||
|
printableID += "."
|
||
|
}
|
||
|
}
|
||
|
cmd.Println(printableID, string(raw))
|
||
|
} else {
|
||
|
cmd.Println(string(raw))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|