mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
f250ad7b40
add rw locks usage
59 lines
1.0 KiB
Swift
59 lines
1.0 KiB
Swift
// Copyright 2019 Yandex LLC. All rights reserved.
|
|
|
|
import Foundation
|
|
|
|
private enum ImageHeaderData: CaseIterable {
|
|
case png
|
|
case jpeg
|
|
case gif
|
|
case tiff_01
|
|
case tiff_02
|
|
|
|
var rawValue: UInt8 {
|
|
switch self {
|
|
case .png:
|
|
return 0x89
|
|
case .jpeg:
|
|
return 0xFF
|
|
case .gif:
|
|
return 0x47
|
|
case .tiff_01:
|
|
return 0x49
|
|
case .tiff_02:
|
|
return 0x4D
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum ImageFormat {
|
|
case unknown
|
|
case png
|
|
case jpeg
|
|
case gif
|
|
case tiff
|
|
}
|
|
|
|
extension Data {
|
|
public var imageFormat: ImageFormat {
|
|
guard !isEmpty else { return .unknown }
|
|
let buffer: UInt8 = self[0]
|
|
return ImageHeaderData.allCases.first { $0.rawValue == buffer }.format
|
|
}
|
|
}
|
|
|
|
extension Optional where Wrapped == ImageHeaderData {
|
|
fileprivate var format: ImageFormat {
|
|
guard let format = self else { return .unknown }
|
|
switch format {
|
|
case .png:
|
|
return .png
|
|
case .jpeg:
|
|
return .jpeg
|
|
case .gif:
|
|
return .gif
|
|
case .tiff_01, .tiff_02:
|
|
return .tiff
|
|
}
|
|
}
|
|
}
|