frostfs-node/pkg/innerring/processors/subnet/delete.go

45 lines
1.0 KiB
Go

package subnetevents
import (
"fmt"
subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id"
)
// Delete represents a notification about NeoFS subnet removal.
// Generated by a contract when intending to delete a subnet.
type Delete interface {
// Contains the ID of the subnet to be removed.
eventWithID
}
// DeleteValidator asserts intent to remove a subnet.
type DeleteValidator struct{}
// Assert processes the attempt to remove a subnet. It approves the removal through nil return.
//
// All read errors of Delete are forwarded.
//
// It returns an error on:
// * zero subnet creation;
// * empty ID or different from the one wired into info;
// * empty owner ID or different from the one wired into info.
func (x DeleteValidator) Assert(event Delete) error {
var err error
// read ID
var id subnetid.ID
if err = event.ReadID(&id); err != nil {
return fmt.Errorf("read ID: %w", err)
}
// prevent zero subnet removal
if subnetid.IsZero(id) {
return zeroSubnetOp{
op: "removal",
}
}
return nil
}