IONFileStructures+Converters.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import Foundation
  2. import IONFilesystemLib
  3. extension IONFILEStringEncoding {
  4. static func create(from text: String) -> Self {
  5. switch text {
  6. case Constants.StringEncodingValue.ascii: .ascii
  7. case Constants.StringEncodingValue.utf16: .utf16
  8. case Constants.StringEncodingValue.utf8: .utf8
  9. default: .utf8
  10. }
  11. }
  12. }
  13. extension IONFILEDirectoryType {
  14. static func create(from text: String) -> Self? {
  15. switch text {
  16. case Constants.DirectoryTypeValue.cache: .cache
  17. case Constants.DirectoryTypeValue.data, Constants.DirectoryTypeValue.documents, Constants.DirectoryTypeValue.external, Constants.DirectoryTypeValue.externalCache, Constants.DirectoryTypeValue.externalStorage: .document
  18. case Constants.DirectoryTypeValue.library: .library
  19. case Constants.DirectoryTypeValue.libraryNoCloud: .notSyncedLibrary
  20. case Constants.DirectoryTypeValue.temporary: .temporary
  21. default: nil
  22. }
  23. }
  24. }
  25. extension IONFILEEncodingValueMapper {
  26. var textValue: String {
  27. switch self {
  28. case .byteBuffer(let data): data.base64EncodedString()
  29. case .string(_, let text): text
  30. @unknown default: ""
  31. }
  32. }
  33. }
  34. extension IONFILEItemAttributeModel {
  35. typealias JSResult = [String: Any]
  36. func toJSResult(with url: URL) -> JSResult {
  37. [
  38. Constants.ItemAttributeJSONKey.name: url.lastPathComponent,
  39. Constants.ItemAttributeJSONKey.type: type.description,
  40. Constants.ItemAttributeJSONKey.size: size,
  41. Constants.ItemAttributeJSONKey.ctime: UInt64(creationDateTimestamp.rounded()),
  42. Constants.ItemAttributeJSONKey.mtime: UInt64(modificationDateTimestamp.rounded()),
  43. Constants.ItemAttributeJSONKey.uri: url.absoluteString
  44. ]
  45. }
  46. }
  47. extension IONFILEItemType {
  48. var description: String {
  49. switch self {
  50. case .directory: Constants.FileItemTypeValue.directory
  51. case .file: Constants.FileItemTypeValue.file
  52. @unknown default: Constants.FileItemTypeValue.fallback
  53. }
  54. }
  55. }