generated from TrueCloudLab/basic
Denis Kirillov
fe6f3471f9
Replace non-printable symbols by dot (.) when printing chain id Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
56 lines
1 KiB
Go
56 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
|
|
}
|