package stores import ( "fmt" "golang.org/x/xerrors" "github.com/filecoin-project/specs-actors/actors/abi" ) const ( FTUnsealed SectorFileType = 1 << iota FTSealed FTCache ) const ( FTNone SectorFileType = 0 ) type SectorFileType int func (t SectorFileType) String() string { switch t { case FTUnsealed: return "unsealed" case FTSealed: return "sealed" case FTCache: return "cache" default: return fmt.Sprintf("", t) } } type SectorPaths struct { Id abi.SectorID Unsealed string Sealed string Cache string } func ParseSectorID(baseName string) (abi.SectorID, error) { var n abi.SectorNumber var mid abi.ActorID read, err := fmt.Sscanf(baseName, "s-t0%d-%d", &mid, &n) if err != nil { return abi.SectorID{}, xerrors.Errorf("sscanf sector name ('%s'): %w", baseName, err) } if read != 2 { return abi.SectorID{}, xerrors.Errorf("parseSectorID expected to scan 2 values, got %d", read) } return abi.SectorID{ Miner: mid, Number: n, }, nil } func SectorName(sid abi.SectorID) string { return fmt.Sprintf("s-t0%d-%d", sid.Miner, sid.Number) } func PathByType(sps SectorPaths, fileType SectorFileType) string { switch fileType { case FTUnsealed: return sps.Unsealed case FTSealed: return sps.Sealed case FTCache: return sps.Cache } panic("requested unknown path type") } func SetPathByType(sps *SectorPaths, fileType SectorFileType, p string) { switch fileType { case FTUnsealed: sps.Unsealed = p case FTSealed: sps.Sealed = p case FTCache: sps.Cache = p } }