Skip to content
Snippets Groups Projects

Kotlin Bitflags

Kotlin-Bitflags is a utility library to simplify implementing bitflags in Kotlin. It integrates with Kotlin unsigned types and Java Enumsets. This especially useful when interacting with binary protocols from Kotlin.

Using Kotlin-Bitflags

After adding this module to your dependencies, you'll have to implement the related interfaces in your classes:

enum class MessageFlag(
  override val value: UInt,
) : Flag<UInt> {
  Self(0x01u),
  Highlight(0x02u),
  Redirected(0x04u),
  ServerMsg(0x08u),
  Backlog(0x80u);

  companion object : Flags<UInt, MessageFlag> {
    override val all: Set<MessageFlag> = values().toEnumSet()
  }
}

This allows you to then use this elsewhere to e.g initialize a field from discrete values

// Construct from varargs or an array
val field = MessageFlag.of(MessageFlag.Self, MessageFlag.Highlight)

val values = listOf(MessageFlag.Self, MessageFlag.Highlight)
// Or from a collection
val field = MessageFlag.of(values)
// Or use the to helper
val field = values.toEnumSet()

You can also convert such a field into the raw binary value easily

// Returns in this case UInt
field.toBits()

Additional utility functions are available:

// Empty field
MessageFlag.none()
// Get all non-null values
MessageFlag.validValues()