MobileCoin-Swift/Sources/LibMobileCoin/CStructWrapper.swift
2021-04-02 05:24:05 -07:00

28 lines
641 B
Swift

//
// Copyright (c) 2020-2021 MobileCoin. All rights reserved.
//
import Foundation
protocol CStructWrapper {
associatedtype CStruct
func withUnsafeCStructPointer<R>(
_ body: (UnsafePointer<CStruct>) throws -> R
) rethrows -> R
}
extension Optional where Wrapped: CStructWrapper {
func withUnsafeCStructPointer<R>(
_ body: (UnsafePointer<Wrapped.CStruct>?) throws -> R
) rethrows -> R {
if let unwrapped = self {
return try unwrapped.withUnsafeCStructPointer { ptr in
try body(ptr)
}
} else {
return try body(nil)
}
}
}