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.