DropletCategory

The shelf of the Store a droplet sits on.

enum DropletCategory

A closed set, and it is closed because it is not a label: it is the Store section the droplet appears under. category was a free String documented as "for example Productivity or Media", so a droplet could declare anything, pass validation, and then be filed under Productivity by a host that recognises three values — the author's choice disappearing without an error anywhere along the way.

Adding a case means adding a Store section in Droppy. A value the Store cannot show is a value that silently becomes Productivity again, which is the bug this type exists to close.

Cases

DropletCategory.productivity

case productivity

Anything that gets work done: timers, launchers, clipboards, windows.

DropletCategory.media

case media

Music, video, playback, capture.

DropletCategory.ai

case ai

On-device models, transcription, generation, recognition.

Initializers

init(rawValue:)

init?(rawValue: String)

Type properties

allowedValues

static var allowedValues: String { get }

The values a manifest may carry, for an error message that tells the author what to write instead.

Type methods

resolve(_:)

static func resolve(_ rawCategory: String) -> DropletCategory?

The category a manifest's raw string means, or nil when it names none of them.

Case-insensitive, because a manifest writes it the way it reads in the Store ("Productivity") and the Store matches it lowercased.