1 // Copyright 2023-present 650 Industries. All rights reserved. 2 3 import ExpoModulesCore 4 5 struct InfoOptions: Record { 6 @Field var md5: Bool = false 7 @Field var size: Bool = false 8 } 9 10 struct ReadingOptions: Record { 11 @Field var encoding: Encoding = .utf8 12 @Field var position: Int? 13 @Field var length: Int? 14 } 15 16 struct WritingOptions: Record { 17 @Field var encoding: Encoding = .utf8 18 } 19 20 struct DeletingOptions: Record { 21 @Field var idempotent: Bool = false 22 } 23 24 struct RelocatingOptions: Record { 25 @Field var from: URL? 26 @Field var to: URL? 27 asTuplenull28 func asTuple() throws -> (URL, URL) { 29 guard let from, let to else { 30 let missingOptionName = from == nil ? "from" : "to" 31 throw Exception(name: "MissingParameterException", description: "Missing option '\(missingOptionName)'") 32 } 33 return (from, to) 34 } 35 } 36 37 struct MakeDirectoryOptions: Record { 38 @Field var intermediates: Bool = false 39 } 40 41 struct DownloadOptions: Record { 42 @Field var md5: Bool = false 43 @Field var cache: Bool = false 44 @Field var headers: [String: String]? 45 @Field var sessionType: SessionType = .background 46 } 47 48 struct UploadOptions: Record { 49 @Field var headers: [String: String]? 50 @Field var httpMethod: HttpMethod = .post 51 @Field var sessionType: SessionType = .background 52 @Field var uploadType: UploadType = .binaryContent 53 54 // Multipart 55 @Field var fieldName: String? 56 @Field var mimeType: String? 57 @Field var parameters: [String: String]? 58 } 59 60 enum SessionType: Int, Enumerable { 61 case background = 0 62 case foreground = 1 63 } 64 65 enum HttpMethod: String, Enumerable { 66 case post = "POST" 67 case put = "PUT" 68 case patch = "PATCH" 69 } 70 71 enum UploadType: Int, Enumerable { 72 case binaryContent = 0 73 case multipart = 1 74 } 75