143 lines
6.5 KiB
Swift
143 lines
6.5 KiB
Swift
import Foundation
|
|
import CWinRT
|
|
import WinSDK
|
|
|
|
// Handwritten implementation for PropertyValue which *doesn't* try to do the IInspectable <-> Any mapping.
|
|
// This class is used by the AnyWrapper to create IInspectable instances from this subset of known Any values.
|
|
internal final class PropertyValue {
|
|
private static let _IPropertyValueStatics: IPropertyValueStatics = try! RoGetActivationFactory(HString("Windows.Foundation.PropertyValue"))
|
|
|
|
public static func createUInt8(_ value: UInt8) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateUInt8Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createInt16(_ value: Int16) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateInt16Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createUInt16(_ value: UInt16) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateUInt16Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createInt32(_ value: Int32) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateInt32Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createUInt32(_ value: UInt32) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateUInt32Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createInt64(_ value: Int64) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateInt64Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createUInt64(_ value: UInt64) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateUInt64Impl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createSingle(_ value: Float) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateSingleImpl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createDouble(_ value: Double) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateDoubleImpl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createBoolean(_ value: Bool) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateBooleanImpl(.init(from: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createString(_ value: String) -> WindowsFoundation.IInspectable {
|
|
let _value = try! HString(value)
|
|
let propertyValue = try! _IPropertyValueStatics.CreateStringImpl(_value.get())
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createGuid(_ value: GUID) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateGuidImpl(value)
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createDateTime(_ value: DateTime) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateDateTimeImpl(.from(swift: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createTimeSpan(_ value: TimeSpan) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateTimeSpanImpl(.from(swift: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createPoint(_ value: Point) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreatePointImpl(.from(swift: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createSize(_ value: Size) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateSizeImpl(.from(swift: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
|
|
public static func createRect(_ value: Rect) -> WindowsFoundation.IInspectable {
|
|
let propertyValue = try! _IPropertyValueStatics.CreateRectImpl(.from(swift: value))
|
|
return .init(propertyValue!)
|
|
}
|
|
}
|
|
|
|
extension PropertyValue
|
|
{
|
|
static func createInt(_ value: Int) -> WindowsFoundation.IInspectable {
|
|
#if arch(x86_64) || arch(arm64)
|
|
return PropertyValue.createInt64(Int64(value))
|
|
#elseif arch(i386) || arch(arm)
|
|
return PropertyValue.createInt32(Int32(value))
|
|
#else
|
|
fatalError("unknown process architecture size")
|
|
#endif
|
|
}
|
|
|
|
static func createUInt(_ value: UInt) -> WindowsFoundation.IInspectable {
|
|
#if arch(x86_64) || arch(arm64)
|
|
return PropertyValue.createUInt64(UInt64(value))
|
|
#elseif arch(i386) || arch(arm)
|
|
return PropertyValue.createUInt32(UInt32(value))
|
|
#else
|
|
fatalError("unknown process architecture size")
|
|
#endif
|
|
}
|
|
|
|
static func createFrom(_ any: Any) -> WindowsFoundation.IInspectable? {
|
|
switch any {
|
|
case let value as String: return PropertyValue.createString(value)
|
|
case let value as Int: return PropertyValue.createInt(value)
|
|
case let value as Int16: return PropertyValue.createInt16(value)
|
|
case let value as Int32: return PropertyValue.createInt32(value)
|
|
case let value as Int64: return PropertyValue.createInt64(value)
|
|
case let value as UInt: return PropertyValue.createUInt(value)
|
|
case let value as UInt8: return PropertyValue.createUInt8(value)
|
|
case let value as UInt32: return PropertyValue.createUInt32(value)
|
|
case let value as UInt64: return PropertyValue.createUInt64(value)
|
|
case let value as Float: return PropertyValue.createSingle(value)
|
|
case let value as Double: return PropertyValue.createDouble(value)
|
|
case let value as Bool: return PropertyValue.createBoolean(value)
|
|
case let value as GUID: return PropertyValue.createGuid(value)
|
|
case let value as DateTime: return PropertyValue.createDateTime(value)
|
|
case let value as TimeSpan: return PropertyValue.createTimeSpan(value)
|
|
case let value as Point: return PropertyValue.createPoint(value)
|
|
case let value as Size: return PropertyValue.createSize(value)
|
|
case let value as Rect: return PropertyValue.createRect(value)
|
|
default: return nil
|
|
}
|
|
}
|
|
}
|