-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Total fucking rework. Can't fucking use the fucking generics and fuck…
…ing associated types as fucking flexibly as we fucking want to.
- Loading branch information
1 parent
b9726ac
commit 2182023
Showing
33 changed files
with
1,968 additions
and
2,736 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import Foundation | ||
|
||
public enum Anything { | ||
case other(CustomStringConvertible, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Anything: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .other(let subtype, let suffix, let params): return "\(subtype)\(suffix)\(params)" | ||
case .anything(let suffix, let params): return "*\(suffix)\(params)" | ||
} | ||
} | ||
} | ||
|
||
extension Anything: MediaSubtype { public var type: MediaType { .anything(self) } } | ||
|
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import Foundation | ||
|
||
public enum Font { | ||
case collection(Suffix? = nil, Parameters? = nil) | ||
case otf(Suffix? = nil, Parameters? = nil) | ||
case sfnt(Suffix? = nil, Parameters? = nil) | ||
case ttf(Suffix? = nil, Parameters? = nil) | ||
case woff(Suffix? = nil, Parameters? = nil) | ||
case woff2(Suffix? = nil, Parameters? = nil) | ||
case other(String, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Font: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .collection(let suffix, let parameters): return "collection\(suffix)\(parameters)" | ||
case .otf(let suffix, let parameters): return "otf\(suffix)\(parameters)" | ||
case .sfnt(let suffix, let parameters): return "sfnt\(suffix)\(parameters)" | ||
case .ttf(let suffix, let parameters): return "ttf\(suffix)\(parameters)" | ||
case .woff(let suffix, let parameters): return "woff\(suffix)\(parameters)" | ||
case .woff2(let suffix, let parameters): return "woff2\(suffix)\(parameters)" | ||
case .other(let value, let suffix, let parameters): return "\(value)\(suffix)\(parameters)" | ||
case .anything(let suffix, let parameters): return "*\(suffix)\(parameters)" | ||
} | ||
} | ||
} | ||
|
||
extension Font: MediaSubtype { public var type: MediaType { .font(self) } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
import Foundation | ||
|
||
public enum Image { | ||
case aces(Suffix? = nil, Parameters? = nil) | ||
case avci(Suffix? = nil, Parameters? = nil) | ||
case avcs(Suffix? = nil, Parameters? = nil) | ||
case avif(Suffix? = nil, Parameters? = nil) | ||
case bmp(Suffix? = nil, Parameters? = nil) | ||
case cgm(Suffix? = nil, Parameters? = nil) | ||
case dicomRle(Suffix? = nil, Parameters? = nil) | ||
case emf(Suffix? = nil, Parameters? = nil) | ||
case example(Suffix? = nil, Parameters? = nil) | ||
case fits(Suffix? = nil, Parameters? = nil) | ||
case g3fax(Suffix? = nil, Parameters? = nil) | ||
case heic(Suffix? = nil, Parameters? = nil) | ||
case heicSequence(Suffix? = nil, Parameters? = nil) | ||
case heif(Suffix? = nil, Parameters? = nil) | ||
case heifSequence(Suffix? = nil, Parameters? = nil) | ||
case hej2k(Suffix? = nil, Parameters? = nil) | ||
case hsj2(Suffix? = nil, Parameters? = nil) | ||
case jls(Suffix? = nil, Parameters? = nil) | ||
case jp2(Suffix? = nil, Parameters? = nil) | ||
case jph(Suffix? = nil, Parameters? = nil) | ||
case jphc(Suffix? = nil, Parameters? = nil) | ||
case jpm(Suffix? = nil, Parameters? = nil) | ||
case jpx(Suffix? = nil, Parameters? = nil) | ||
case jxr(Suffix? = nil, Parameters? = nil) | ||
case jxrA(Suffix? = nil, Parameters? = nil) | ||
case jxrS(Suffix? = nil, Parameters? = nil) | ||
case jxs(Suffix? = nil, Parameters? = nil) | ||
case jxsc(Suffix? = nil, Parameters? = nil) | ||
case jxsi(Suffix? = nil, Parameters? = nil) | ||
case jxss(Suffix? = nil, Parameters? = nil) | ||
case ktx(Suffix? = nil, Parameters? = nil) | ||
case ktx2(Suffix? = nil, Parameters? = nil) | ||
case naplps(Suffix? = nil, Parameters? = nil) | ||
case png(Suffix? = nil, Parameters? = nil) | ||
case pwgRaster(Suffix? = nil, Parameters? = nil) | ||
case svg(Suffix? = nil, Parameters? = nil) | ||
case t38(Suffix? = nil, Parameters? = nil) | ||
case tiff(Suffix? = nil, Parameters? = nil) | ||
case tiffFx(Suffix? = nil, Parameters? = nil) | ||
case wmf(Suffix? = nil, Parameters? = nil) | ||
case other(String, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Image: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .aces(let suffix, let parameters): return "aces\(suffix)\(parameters)" | ||
case .avci(let suffix, let parameters): return "avci\(suffix)\(parameters)" | ||
case .avcs(let suffix, let parameters): return "avcs\(suffix)\(parameters)" | ||
case .avif(let suffix, let parameters): return "avif\(suffix)\(parameters)" | ||
case .bmp(let suffix, let parameters): return "bmp\(suffix)\(parameters)" | ||
case .cgm(let suffix, let parameters): return "cgm\(suffix)\(parameters)" | ||
case .dicomRle(let suffix, let parameters): return "dicom-rle\(suffix)\(parameters)" | ||
case .emf(let suffix, let parameters): return "emf\(suffix)\(parameters)" | ||
case .example(let suffix, let parameters): return "example\(suffix)\(parameters)" | ||
case .fits(let suffix, let parameters): return "fits\(suffix)\(parameters)" | ||
case .g3fax(let suffix, let parameters): return "g3fax\(suffix)\(parameters)" | ||
case .heic(let suffix, let parameters): return "heic\(suffix)\(parameters)" | ||
case .heicSequence(let suffix, let parameters): return "heic-sequence\(suffix)\(parameters)" | ||
case .heif(let suffix, let parameters): return "heif\(suffix)\(parameters)" | ||
case .heifSequence(let suffix, let parameters): return "heif-sequence\(suffix)\(parameters)" | ||
case .hej2k(let suffix, let parameters): return "hej2k\(suffix)\(parameters)" | ||
case .hsj2(let suffix, let parameters): return "hsj2\(suffix)\(parameters)" | ||
case .jls(let suffix, let parameters): return "jls\(suffix)\(parameters)" | ||
case .jp2(let suffix, let parameters): return "jp2\(suffix)\(parameters)" | ||
case .jph(let suffix, let parameters): return "jph\(suffix)\(parameters)" | ||
case .jphc(let suffix, let parameters): return "jphc\(suffix)\(parameters)" | ||
case .jpm(let suffix, let parameters): return "jpm\(suffix)\(parameters)" | ||
case .jpx(let suffix, let parameters): return "jpx\(suffix)\(parameters)" | ||
case .jxr(let suffix, let parameters): return "jxr\(suffix)\(parameters)" | ||
case .jxrA(let suffix, let parameters): return "jxrA\(suffix)\(parameters)" | ||
case .jxrS(let suffix, let parameters): return "jxrS\(suffix)\(parameters)" | ||
case .jxs(let suffix, let parameters): return "jxs\(suffix)\(parameters)" | ||
case .jxsc(let suffix, let parameters): return "jxsc\(suffix)\(parameters)" | ||
case .jxsi(let suffix, let parameters): return "jxsi\(suffix)\(parameters)" | ||
case .jxss(let suffix, let parameters): return "jxss\(suffix)\(parameters)" | ||
case .ktx(let suffix, let parameters): return "ktx\(suffix)\(parameters)" | ||
case .ktx2(let suffix, let parameters): return "ktx2\(suffix)\(parameters)" | ||
case .naplps(let suffix, let parameters): return "naplps\(suffix)\(parameters)" | ||
case .png(let suffix, let parameters): return "png\(suffix)\(parameters)" | ||
case .pwgRaster(let suffix, let parameters): return "pwg-raster\(suffix)\(parameters)" | ||
case .svg(let suffix, let parameters): return "svg\(suffix)\(parameters)" | ||
case .t38(let suffix, let parameters): return "t38\(suffix)\(parameters)" | ||
case .tiff(let suffix, let parameters): return "tiff\(suffix)\(parameters)" | ||
case .tiffFx(let suffix, let parameters): return "tiff-fx\(suffix)\(parameters)" | ||
case .wmf(let suffix, let parameters): return "wmf\(suffix)\(parameters)" | ||
case .other(let value, let suffix, let parameters): return "\(value)\(suffix)\(parameters)" | ||
case .anything(let suffix, let parameters): return "*\(suffix)\(parameters)" | ||
} | ||
} | ||
} | ||
|
||
extension Image: MediaSubtype { public var type: MediaType { .image(self) } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import Foundation | ||
|
||
public protocol MediaSubtype { | ||
var type: MediaType { get } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,34 @@ | ||
@_exported import MediaTypeEnums | ||
@_exported import MediaTypeUtilities | ||
import Foundation | ||
|
||
public enum MediaType { | ||
case application(Application) | ||
case audio(Audio) | ||
case font(Font) | ||
case image(Image) | ||
case message(Message) | ||
case model(Model) | ||
case multipart(Multipart) | ||
case text(Text) | ||
case video(Video) | ||
case other(type: String, subtype: String, Suffix? = nil, Parameters? = nil) | ||
case anything(Anything) | ||
} | ||
|
||
extension MediaType: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .application(let subtype): return "application/\(subtype)" | ||
case .audio(let subtype): return "audio/\(subtype)" | ||
case .font(let subtype): return "font/\(subtype)" | ||
case .image(let subtype): return "image/\(subtype)" | ||
case .message(let subtype): return "message/\(subtype)" | ||
case .model(let subtype): return "model/\(subtype)" | ||
case .multipart(let subtype): return "multipart/\(subtype)" | ||
case .text(let subtype): return "text/\(subtype)" | ||
case .video(let subtype): return "video/\(subtype)" | ||
case .other(let type, let subtype, let suffix, let parameters):return "\(type)/\(subtype)\(suffix)\(parameters)" | ||
case .anything(let anything): return "*/\(anything)" | ||
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
import Foundation | ||
|
||
public enum Message { | ||
case CPIM(Suffix? = nil, Parameters? = nil) | ||
case deliveryStatus(Suffix? = nil, Parameters? = nil) | ||
case dispositionNotification(Suffix? = nil, Parameters? = nil) | ||
case example(Suffix? = nil, Parameters? = nil) | ||
case feedbackReport(Suffix? = nil, Parameters? = nil) | ||
case global(Suffix? = nil, Parameters? = nil) | ||
case globalDeliveryStatus(Suffix? = nil, Parameters? = nil) | ||
case globalDispositionNotification(Suffix? = nil, Parameters? = nil) | ||
case globalHeaders(Suffix? = nil, Parameters? = nil) | ||
case http(Suffix? = nil, Parameters? = nil) | ||
case imdn(Suffix? = nil, Parameters? = nil) | ||
case news(Suffix? = nil, Parameters? = nil) | ||
case sHttp(Suffix? = nil, Parameters? = nil) | ||
case sip(Suffix? = nil, Parameters? = nil) | ||
case sipfrag(Suffix? = nil, Parameters? = nil) | ||
case trackingStatus(Suffix? = nil, Parameters? = nil) | ||
case other(String, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Message: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .CPIM(let suffix, let parameters): return "CPIM\(suffix)\(parameters)" | ||
case .deliveryStatus(let suffix, let parameters): return "delivery-status\(suffix)\(parameters)" | ||
case .dispositionNotification(let suffix, let parameters): return "disposition-notification\(suffix)\(parameters)" | ||
case .example(let suffix, let parameters): return "example\(suffix)\(parameters)" | ||
case .feedbackReport(let suffix, let parameters): return "feedback-report\(suffix)\(parameters)" | ||
case .global(let suffix, let parameters): return "global\(suffix)\(parameters)" | ||
case .globalDeliveryStatus(let suffix, let parameters): return "global-delivery-status\(suffix)\(parameters)" | ||
case .globalDispositionNotification(let suffix, let parameters): return "global-disposition-notification\(suffix)\(parameters)" | ||
case .globalHeaders(let suffix, let parameters): return "global-headers\(suffix)\(parameters)" | ||
case .http(let suffix, let parameters): return "http\(suffix)\(parameters)" | ||
case .imdn(let suffix, let parameters): return "imdn\(suffix)\(parameters)" | ||
case .news(let suffix, let parameters): return "news\(suffix)\(parameters)" | ||
case .sHttp(let suffix, let parameters): return "s-http\(suffix)\(parameters)" | ||
case .sip(let suffix, let parameters): return "sip\(suffix)\(parameters)" | ||
case .sipfrag(let suffix, let parameters): return "sipfrag\(suffix)\(parameters)" | ||
case .trackingStatus(let suffix, let parameters): return "tracking-status\(suffix)\(parameters)" | ||
case .other(let value, let suffix, let parameters): return "\(value)\(suffix)\(parameters)" | ||
case .anything(let suffix, let parameters): return "*\(suffix)\(parameters)" | ||
} | ||
} | ||
} | ||
|
||
extension Message: MediaSubtype { public var type: MediaType { .message(self) } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import Foundation | ||
|
||
public enum Model { | ||
case _3mf(Suffix? = nil, Parameters? = nil) | ||
case e57(Suffix? = nil, Parameters? = nil) | ||
case example(Suffix? = nil, Parameters? = nil) | ||
case gltfBinary(Suffix? = nil, Parameters? = nil) | ||
case gltf(Suffix? = nil, Parameters? = nil) | ||
case iges(Suffix? = nil, Parameters? = nil) | ||
case mtl(Suffix? = nil, Parameters? = nil) | ||
case obj(Suffix? = nil, Parameters? = nil) | ||
case step(Suffix? = nil, Parameters? = nil) | ||
case stepXml(Suffix? = nil, Parameters? = nil) | ||
case stl(Suffix? = nil, Parameters? = nil) | ||
case x3dVrml(Suffix? = nil, Parameters? = nil) | ||
case x3d(Suffix? = nil, Parameters? = nil) | ||
case other(String, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Model: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case ._3mf(let suffix, let parameters): return "3mf\(suffix)\(parameters)" | ||
case .e57(let suffix, let parameters): return "e57\(suffix)\(parameters)" | ||
case .example(let suffix, let parameters): return "example\(suffix)\(parameters)" | ||
case .gltfBinary(let suffix, let parameters): return "gltf-binary\(suffix)\(parameters)" | ||
case .gltf(let suffix, let parameters): return "gltf\(suffix)\(parameters)" | ||
case .iges(let suffix, let parameters): return "iges\(suffix)\(parameters)" | ||
case .mtl(let suffix, let parameters): return "mtl\(suffix)\(parameters)" | ||
case .obj(let suffix, let parameters): return "obj\(suffix)\(parameters)" | ||
case .step(let suffix, let parameters): return "step\(suffix)\(parameters)" | ||
case .stepXml(let suffix, let parameters): return "step-xml\(suffix)\(parameters)" | ||
case .stl(let suffix, let parameters): return "stl\(suffix)\(parameters)" | ||
case .x3dVrml(let suffix, let parameters): return "x3d-vrml\(suffix)\(parameters)" | ||
case .x3d(let suffix, let parameters): return "x3d\(suffix)\(parameters)" | ||
case .other(let value, let suffix, let parameters): return "\(value)\(suffix)\(parameters)" | ||
case .anything(let suffix, let parameters): return "*\(suffix)\(parameters)" | ||
} | ||
} | ||
} | ||
|
||
extension Model: MediaSubtype { public var type: MediaType { .model(self) } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import Foundation | ||
|
||
public enum Multipart { | ||
case appledouble(Suffix? = nil, Parameters? = nil) | ||
case byteranges(Suffix? = nil, Parameters? = nil) | ||
case encrypted(Suffix? = nil, Parameters? = nil) | ||
case example(Suffix? = nil, Parameters? = nil) | ||
case formData(Suffix? = nil, Parameters? = nil) | ||
case headerSet(Suffix? = nil, Parameters? = nil) | ||
case multilingual(Suffix? = nil, Parameters? = nil) | ||
case related(Suffix? = nil, Parameters? = nil) | ||
case report(Suffix? = nil, Parameters? = nil) | ||
case signed(Suffix? = nil, Parameters? = nil) | ||
case voiceMessage(Suffix? = nil, Parameters? = nil) | ||
case xMixedReplace(Suffix? = nil, Parameters? = nil) | ||
case other(String, Suffix? = nil, Parameters? = nil) | ||
case anything(Suffix? = nil, Parameters? = nil) | ||
} | ||
|
||
extension Multipart: CustomStringConvertible { | ||
public var description: String { | ||
switch self { | ||
case .appledouble(let suffix, let parameters): return "appledouble\(suffix)\(parameters)" | ||
case .byteranges(let suffix, let parameters): return "byteranges\(suffix)\(parameters)" | ||
case .encrypted(let suffix, let parameters): return "encrypted\(suffix)\(parameters)" | ||
case .example(let suffix, let parameters): return "example\(suffix)\(parameters)" | ||
case .formData(let suffix, let parameters): return "form-data\(suffix)\(parameters)" | ||
case .headerSet(let suffix, let parameters): return "header-set\(suffix)\(parameters)" | ||
case .multilingual(let suffix, let parameters): return "multilingual\(suffix)\(parameters)" | ||
case .related(let suffix, let parameters): return "related\(suffix)\(parameters)" | ||
case .report(let suffix, let parameters): return "report\(suffix)\(parameters)" | ||
case .signed(let suffix, let parameters): return "signed\(suffix)\(parameters)" | ||
case .voiceMessage(let suffix, let parameters): return "voice-message\(suffix)\(parameters)" | ||
case .xMixedReplace(let suffix, let parameters): return "x-mixed-replace\(suffix)\(parameters)" | ||
case .other(let value, let suffix, let parameters): return "\(value)\(suffix)\(parameters)" | ||
case .anything(let suffix, let parameters): return "*\(suffix)\(parameters)" | ||
} | ||
} | ||
} | ||
|
||
extension Multipart: MediaSubtype { public var type: MediaType { .multipart(self) } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import Foundation | ||
|
||
public typealias Parameters = [String: CustomStringConvertible?] | ||
|
||
internal extension DefaultStringInterpolation { | ||
@inlinable mutating func appendInterpolation(_ value: Parameters?) { | ||
guard let parameters = value else { return } | ||
if parameters.isEmpty { return } | ||
for (key, value) in parameters { | ||
appendLiteral(";") | ||
appendLiteral(key) | ||
guard let value = value else { continue } | ||
appendLiteral("=") | ||
appendLiteral(value.description) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import Foundation | ||
|
||
public enum Suffix: String { | ||
case xml = "+xml" | ||
case json = "+json" | ||
case ber = "+ber" | ||
case cbor = "+cbor" | ||
case der = "+der" | ||
case fastinfoset = "+fastinfoset" | ||
case wbxml = "+wbxml" | ||
case zip = "+zip" | ||
case tlv = "+tlv" | ||
case jsonSeq = "+json-seq" | ||
case sqlite3 = "+sqlite3" | ||
case jwt = "+jwt" | ||
case gzip = "+gzip" | ||
case cborSeq = "+cbor-seq" | ||
case zstd = "+zstd" | ||
} | ||
|
||
extension Suffix: CustomStringConvertible { public var description: String { rawValue } } | ||
|
||
extension Optional: CustomStringConvertible where Wrapped == Suffix { | ||
public var description: String { | ||
switch self { | ||
case .none: return "" | ||
case .some(let value): return value.description | ||
} | ||
} | ||
} | ||
|
Oops, something went wrong.