public struct ApplicationNotificationIndicatorSourceID: Equatable, Hashable, RawRepresentable, Sendable { public init(rawValue: String) { self.rawValue = rawValue } public var rawValue: String } public struct ApplicationNotificationIndicatorContribution: Equatable, Identifiable, Sendable { public struct ID: Equatable, Hashable, Sendable { public init( sourceID: ApplicationNotificationIndicatorSourceID, scopeID: String ) { self.sourceID = sourceID self.scopeID = scopeID } public var sourceID: ApplicationNotificationIndicatorSourceID public var scopeID: String } public init(id: ID, count: Int) { precondition(count >= 0, "Notification indicator contributions cannot be negative.") self.id = id self.count = count } public var id: ID public var count: Int } public struct ApplicationNotificationIndicatorSummary: Equatable, Sendable { public init( contributions: [ApplicationNotificationIndicatorContribution] = [] ) { self.contributions = contributions } public var contributions: [ApplicationNotificationIndicatorContribution] public var totalCount: Int { contributions.reduce(0) { $0 + $1.count } } public var badgeCount: Int? { totalCount == 0 ? nil : totalCount } public func count(for scopeID: String) -> Int { contributions .filter { $0.id.scopeID == scopeID } .reduce(0) { $0 + $1.count } } }