@@ -124,27 +124,27 @@ extension Card {
124124 /// Layouts for a Magic card
125125 ///
126126 /// [Scryfall documentation](https://scryfall.com/docs/api/layouts)
127- public enum Layout : String , CaseIterable , Codable , Sendable {
127+ public enum Layout : RawRepresentable , CaseIterable , Codable , Sendable , Equatable , Hashable {
128128 case normal, split, flip, transform, meld, leveler, saga, adventure, planar, scheme, vanguard,
129- token, emblem, augment, host, `class`, battle, `case`, mutate, prototype, unknown
130- case modalDfc = " modal_dfc "
131- case doubleSided = " double_sided "
132- case doubleFacedToken = " double_faced_token "
133- case artSeries = " art_series "
134- case reversibleCard = " reversible_card "
135-
136- /// Codable initializer
137- ///
138- /// If this initializer fails to decode a value, instead of throwing an error, it will decode as the ``ScryfallKit/Card/Layout-swift.enum/unknown`` type and print a message to the logs.
139- /// - Parameter decoder: The Decoder to try decoding a ``ScryfallKit/Card/Layout-swift.enum`` from
140- public init ( from decoder : Decoder ) throws {
141- self = ( try ? Self ( rawValue : decoder . singleValueContainer ( ) . decode ( RawValue . self ) ) ) ?? . unknown
142- if self == . unknown , let rawValue = try ? String ( from : decoder ) {
143- if #available ( iOS 14 . 0 , macOS 11 . 0 , * ) {
144- Logger . decoder . error ( " Decoded unknown Layout: \( rawValue ) " )
145- } else {
146- print ( " Decoded unknown Layout: \( rawValue ) " )
147- }
129+ token, emblem, augment, host, `class`, battle, `case`, mutate, prototype, modalDfc , doubleSided , doubleFacedToken , artSeries , reversibleCard
130+
131+ /// A layout that hasn't been added to ScryfallKit yet
132+ case unknown ( String )
133+
134+ /// All known Magic: the Gathering card layouts
135+ public static let allCases : [ Card . Layout ] = [
136+ . normal , . split , . flip , . transform , . meld , . leveler , . saga , . adventure , . planar , . scheme , . vanguard , . token , . emblem , . augment , . host , . class , . battle , . case , . mutate , . prototype , . modalDfc , . doubleSided , . doubleFacedToken , . artSeries , . reversibleCard ,
137+ ]
138+
139+ public var rawValue : String {
140+ switch self {
141+ case . modalDfc : " modal_dfc "
142+ case . doubleSided : " double_sided "
143+ case . doubleFacedToken : " double_faced_token "
144+ case . artSeries : " art_series "
145+ case . reversibleCard : " reversible_card "
146+ case . unknown ( let string ) : string
147+ default : String ( describing : self )
148148 }
149149 }
150150 }
@@ -198,23 +198,51 @@ extension Card {
198198 }
199199
200200 /// Effects applied to a Magic card frame
201- ///
201+ ///
202202 /// [Scryfall documentation](https://scryfall.com/docs/api/frames#frame-effects)
203- public enum FrameEffect : String , Codable , CaseIterable , Sendable {
204- case legendary, miracle, nyxtouched, draft, devoid, tombstone, colorshifted, inverted,
205- sunmoondfc, compasslanddfc, originpwdfc, mooneldrazidfc, waxingandwaningmoondfc, showcase,
206- extendedart, companion, etched, snow, lesson, convertdfc, fandfc, battle, gravestone, fullart,
207- vehicle, borderless, extended, spree, textless, unknown, enchantment, shatteredglass, upsidedowndfc
208-
209- public init ( from decoder: Decoder ) throws {
210- self =
211- try FrameEffect ( rawValue: decoder. singleValueContainer ( ) . decode ( RawValue . self) ) ?? . unknown
212- if self == . unknown, let rawValue = try ? String ( from: decoder) {
213- if #available( iOS 14 . 0 , macOS 11 . 0 , * ) {
214- Logger . decoder. error ( " Decoded unknown FrameEffect: \( rawValue) " )
215- } else {
216- print ( " Decoded unknown FrameEffect: \( rawValue) " )
217- }
203+ public enum FrameEffect : RawRepresentable , Codable , Sendable , CaseIterable , Equatable , Hashable {
204+ case legendary, miracle, draft, devoid, tombstone, showcase, companion, etched, snow, lesson, battle, gravestone, vehicle, borderless, extended, spree, textless, enchantment, inverted
205+ case nyxTouched
206+ case colorShifted
207+ case sunMoonDfc
208+ case compassLandDfc
209+ case originPwDfc
210+ case moonEldraziDfc
211+ case waxingAndWaningMoonDfc
212+ case extendedArt
213+ case convertDfc
214+ case fAndFc
215+ case fullArt
216+ case shatteredGlass
217+ case upsideDownDfc
218+ /// A layout that hasn't been added to ScryfallKit yet
219+ case unknown( String )
220+
221+ /// All known Magic: the Gathering frame effects
222+ public static let allCases : [ Card . FrameEffect ] = [
223+ . legendary, . miracle, . nyxTouched, . draft, . devoid, . tombstone, . colorShifted, . inverted,
224+ . sunMoonDfc, . compassLandDfc, . originPwDfc, . moonEldraziDfc, . waxingAndWaningMoonDfc, . showcase,
225+ . extendedArt, . companion, . etched, . snow, . lesson, . convertDfc, . fAndFc, . battle, . gravestone, . fullArt,
226+ . vehicle, . borderless, . extended, . spree, . textless, . enchantment, . shatteredGlass, . upsideDownDfc,
227+ ]
228+
229+ public var rawValue : String {
230+ switch self {
231+ case . unknown( let unknownRawValue) : unknownRawValue
232+ case . nyxTouched: " nyxtouched "
233+ case . colorShifted: " colorshifted "
234+ case . sunMoonDfc: " sunmoondfc "
235+ case . compassLandDfc: " compasslanddfc "
236+ case . originPwDfc: " originpwdfc "
237+ case . moonEldraziDfc: " mooneldrazidfc "
238+ case . waxingAndWaningMoonDfc: " waxingandwaningmoondfc "
239+ case . extendedArt: " extendedart "
240+ case . convertDfc: " convertdfc "
241+ case . fAndFc: " fandfc "
242+ case . fullArt: " fullart "
243+ case . shatteredGlass: " shatteredglass "
244+ case . upsideDownDfc: " upsidedowndfc "
245+ default : String ( describing: self )
218246 }
219247 }
220248 }
0 commit comments