cloudkit 0.3.8

Safe Rust bindings for Apple's CloudKit framework — iCloud databases and sync on macOS
Documentation
import CloudKit
import Foundation

struct CKNotificationInfoPayload: Codable {
    var alertBody: String?
    var alertLocalizationKey: String?
    var alertLocalizationArgs: [String]?
    var title: String?
    var titleLocalizationKey: String?
    var titleLocalizationArgs: [String]?
    var subtitle: String?
    var subtitleLocalizationKey: String?
    var subtitleLocalizationArgs: [String]?
    var alertActionLocalizationKey: String?
    var alertLaunchImage: String?
    var soundName: String?
    var desiredKeys: [String]?
    var shouldBadge: Bool
    var shouldSendContentAvailable: Bool
    var shouldSendMutableContent: Bool
    var category: String?
    var collapseIDKey: String?
}

func ckEncodeNotificationInfo(_ info: CKSubscription.NotificationInfo?) -> CKNotificationInfoPayload? {
    guard let info else { return nil }
    return CKNotificationInfoPayload(
        alertBody: info.alertBody,
        alertLocalizationKey: info.alertLocalizationKey,
        alertLocalizationArgs: info.alertLocalizationArgs,
        title: info.title,
        titleLocalizationKey: info.titleLocalizationKey,
        titleLocalizationArgs: info.titleLocalizationArgs,
        subtitle: info.subtitle,
        subtitleLocalizationKey: info.subtitleLocalizationKey,
        subtitleLocalizationArgs: info.subtitleLocalizationArgs,
        alertActionLocalizationKey: info.alertActionLocalizationKey,
        alertLaunchImage: info.alertLaunchImage,
        soundName: info.soundName,
        desiredKeys: info.desiredKeys,
        shouldBadge: info.shouldBadge,
        shouldSendContentAvailable: info.shouldSendContentAvailable,
        shouldSendMutableContent: info.shouldSendMutableContent,
        category: info.category,
        collapseIDKey: info.collapseIDKey
    )
}

func ckDecodeNotificationInfo(_ payload: CKNotificationInfoPayload?) -> CKSubscription.NotificationInfo? {
    guard let payload else { return nil }
    let info = CKSubscription.NotificationInfo()
    info.alertBody = payload.alertBody
    info.alertLocalizationKey = payload.alertLocalizationKey
    info.alertLocalizationArgs = payload.alertLocalizationArgs
    info.title = payload.title
    info.titleLocalizationKey = payload.titleLocalizationKey
    info.titleLocalizationArgs = payload.titleLocalizationArgs
    info.subtitle = payload.subtitle
    info.subtitleLocalizationKey = payload.subtitleLocalizationKey
    info.subtitleLocalizationArgs = payload.subtitleLocalizationArgs
    info.alertActionLocalizationKey = payload.alertActionLocalizationKey
    info.alertLaunchImage = payload.alertLaunchImage
    info.soundName = payload.soundName
    info.desiredKeys = payload.desiredKeys
    info.shouldBadge = payload.shouldBadge
    info.shouldSendContentAvailable = payload.shouldSendContentAvailable
    info.shouldSendMutableContent = payload.shouldSendMutableContent
    info.category = payload.category
    info.collapseIDKey = payload.collapseIDKey
    return info
}