github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/kbfsmd/flags.go (about)

     1  // Copyright 2017 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package kbfsmd
     6  
     7  import (
     8  	"fmt"
     9  	"strings"
    10  )
    11  
    12  // MetadataFlags bitfield.
    13  type MetadataFlags byte
    14  
    15  // Possible flags set in the MetadataFlags bitfield.
    16  const (
    17  	MetadataFlagRekey MetadataFlags = 1 << iota
    18  	MetadataFlagWriterMetadataCopied
    19  	MetadataFlagFinal
    20  )
    21  
    22  var metadataFlagStringMap = map[int]string{
    23  	int(MetadataFlagRekey):                "Rekey",
    24  	int(MetadataFlagWriterMetadataCopied): "WriterMetadataCopied",
    25  	int(MetadataFlagFinal):                "Final",
    26  }
    27  
    28  func flagsToString(flags int, flagStringMap map[int]string) string {
    29  	var flagStrings []string
    30  	for f, s := range flagStringMap {
    31  		if flags&f != 0 {
    32  			flagStrings = append(flagStrings, s)
    33  			flags &^= f
    34  		}
    35  	}
    36  	if flags != 0 {
    37  		flagStrings = append(flagStrings, fmt.Sprintf("%b", flags))
    38  	}
    39  	return strings.Join(flagStrings, " | ")
    40  }
    41  
    42  func (flags MetadataFlags) String() string {
    43  	return fmt.Sprintf("MetadataFlags(%s)", flagsToString(int(flags), metadataFlagStringMap))
    44  }
    45  
    46  // WriterFlags bitfield.
    47  type WriterFlags byte
    48  
    49  // Possible flags set in the WriterFlags bitfield.
    50  const (
    51  	MetadataFlagUnmerged WriterFlags = 1 << iota
    52  )
    53  
    54  var writerFlagStringMap = map[int]string{
    55  	int(MetadataFlagUnmerged): "Unmerged",
    56  }
    57  
    58  func (flags WriterFlags) String() string {
    59  	return fmt.Sprintf("WriterFlags(%s)", flagsToString(int(flags), writerFlagStringMap))
    60  }