core/src/iosMain/kotlin/licenseplist/LicensePlistParser.kt
changeset 116 7e40819b3fe2
parent 79 79794afbbf95
equal deleted inserted replaced
115:5c6baebd860d 116:7e40819b3fe2
    26 import kotlinx.cinterop.ObjCObjectVar
    26 import kotlinx.cinterop.ObjCObjectVar
    27 import kotlinx.cinterop.alloc
    27 import kotlinx.cinterop.alloc
    28 import kotlinx.cinterop.memScoped
    28 import kotlinx.cinterop.memScoped
    29 import kotlinx.cinterop.ptr
    29 import kotlinx.cinterop.ptr
    30 import kotlinx.cinterop.value
    30 import kotlinx.cinterop.value
       
    31 import kotlinx.coroutines.suspendCancellableCoroutine
    31 import platform.Foundation.NSBundle
    32 import platform.Foundation.NSBundle
    32 import platform.Foundation.NSData
    33 import platform.Foundation.NSData
    33 import platform.Foundation.NSError
    34 import platform.Foundation.NSError
    34 import platform.Foundation.NSPropertyListMutableContainers
    35 import platform.Foundation.NSPropertyListMutableContainers
    35 import platform.Foundation.NSPropertyListSerialization
    36 import platform.Foundation.NSPropertyListSerialization
    36 import platform.Foundation.NSURL
    37 import platform.Foundation.NSURL
    37 import platform.Foundation.dataWithContentsOfURL
    38 import platform.Foundation.dataWithContentsOfURL
    38 import kotlin.coroutines.resume
    39 import kotlin.coroutines.resume
    39 import kotlin.coroutines.resumeWithException
    40 import kotlin.coroutines.resumeWithException
    40 import kotlin.coroutines.suspendCoroutine
       
    41 
    41 
    42 /**
    42 /**
    43  * Parse LicensePlist files
    43  * Parse LicensePlist files
    44  */
    44  */
    45 class LicensePlistParser {
    45 class LicensePlistParser {
    85     private fun getContent(url: NSURL): NSData {
    85     private fun getContent(url: NSURL): NSData {
    86         return checkNotNull(NSData.dataWithContentsOfURL(url))
    86         return checkNotNull(NSData.dataWithContentsOfURL(url))
    87     }
    87     }
    88 
    88 
    89     @OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
    89     @OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
    90     private suspend fun NSData.toPropertyList(): Any? = suspendCoroutine { cont ->
    90     private suspend fun NSData.toPropertyList(): Any? = suspendCancellableCoroutine { cont ->
    91         val parsed = memScoped {
    91         val parsed = memScoped {
    92             val error: ObjCObjectVar<NSError?> = alloc()
    92             val error: ObjCObjectVar<NSError?> = alloc()
    93             val result = NSPropertyListSerialization.propertyListWithData(this@toPropertyList,
    93             val result = NSPropertyListSerialization.propertyListWithData(
       
    94                 this@toPropertyList,
    94                 options = NSPropertyListMutableContainers,
    95                 options = NSPropertyListMutableContainers,
    95                 format = null,
    96                 format = null,
    96                 error.ptr
    97                 error.ptr
    97             )
    98             )
    98             if (error.value != null) {
    99             if (error.value != null) {