Skip to content

Commit 344c27d

Browse files
committed
coding works on linux now
1 parent 94e881b commit 344c27d

3 files changed

Lines changed: 38 additions & 186 deletions

File tree

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM liveui/boost-base:1.0
2+
3+
WORKDIR /boost
4+
5+
ADD scripts ./scripts
6+
ADD Sources ./Sources
7+
ADD Tests ./Tests
8+
ADD Package.swift ./
9+
10+
RUN swift build --configuration debug
11+

Sources/XMLCoding/Decoder/XMLDecoder.swift

Lines changed: 22 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,18 @@ extension _XMLDecoder : SingleValueDecodingContainer {
324324
// MARK: - Concrete Value Representations
325325

326326
extension _XMLDecoder {
327+
327328
/// Returns the given value unboxed from a container.
328329
internal func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? {
329330
guard !(value is NSNull) else { return nil }
330331

331-
guard let value = value as? String else { return nil }
332+
guard let value = value as? String else {
333+
return nil
334+
}
332335

333-
if value == "true" || value == "1" {
336+
if value.lowercased() == "true" || value == "1" {
334337
return true
335-
} else if value == "false" || value == "0" {
338+
} else if value.lowercased() == "false" || value == "0" {
336339
return false
337340
}
338341

@@ -348,18 +351,7 @@ extension _XMLDecoder {
348351
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
349352
}
350353

351-
let number = NSNumber(value: value)
352-
353-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
354-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
355-
}
356-
357-
let int = number.intValue
358-
guard NSNumber(value: int) == number else {
359-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
360-
}
361-
362-
return int
354+
return Int(exactly: value)
363355
}
364356

365357
internal func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? {
@@ -371,18 +363,7 @@ extension _XMLDecoder {
371363
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
372364
}
373365

374-
let number = NSNumber(value: value)
375-
376-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
377-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
378-
}
379-
380-
let int8 = number.int8Value
381-
guard NSNumber(value: int8) == number else {
382-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
383-
}
384-
385-
return int8
366+
return Int8(exactly: value)
386367
}
387368

388369
internal func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? {
@@ -394,18 +375,7 @@ extension _XMLDecoder {
394375
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
395376
}
396377

397-
let number = NSNumber(value: value)
398-
399-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
400-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
401-
}
402-
403-
let int16 = number.int16Value
404-
guard NSNumber(value: int16) == number else {
405-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
406-
}
407-
408-
return int16
378+
return Int16(exactly: value)
409379
}
410380

411381
internal func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? {
@@ -417,18 +387,7 @@ extension _XMLDecoder {
417387
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
418388
}
419389

420-
let number = NSNumber(value: value)
421-
422-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
423-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
424-
}
425-
426-
let int32 = number.int32Value
427-
guard NSNumber(value: int32) == number else {
428-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
429-
}
430-
431-
return int32
390+
return Int32(exactly: value)
432391
}
433392

434393
internal func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? {
@@ -440,18 +399,7 @@ extension _XMLDecoder {
440399
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
441400
}
442401

443-
let number = NSNumber(value: value)
444-
445-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
446-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
447-
}
448-
449-
let int64 = number.int64Value
450-
guard NSNumber(value: int64) == number else {
451-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
452-
}
453-
454-
return int64
402+
return Int64(exactly: value)
455403
}
456404

457405
internal func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? {
@@ -463,18 +411,7 @@ extension _XMLDecoder {
463411
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
464412
}
465413

466-
let number = NSNumber(value: value)
467-
468-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
469-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
470-
}
471-
472-
let uint = number.uintValue
473-
guard NSNumber(value: uint) == number else {
474-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
475-
}
476-
477-
return uint
414+
return UInt(exactly: value)
478415
}
479416

480417
internal func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? {
@@ -486,18 +423,7 @@ extension _XMLDecoder {
486423
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
487424
}
488425

489-
let number = NSNumber(value: value)
490-
491-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
492-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
493-
}
494-
495-
let uint8 = number.uint8Value
496-
guard NSNumber(value: uint8) == number else {
497-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
498-
}
499-
500-
return uint8
426+
return UInt8(exactly: value)
501427
}
502428

503429
internal func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? {
@@ -509,18 +435,7 @@ extension _XMLDecoder {
509435
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
510436
}
511437

512-
let number = NSNumber(value: value)
513-
514-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
515-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
516-
}
517-
518-
let uint16 = number.uint16Value
519-
guard NSNumber(value: uint16) == number else {
520-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
521-
}
522-
523-
return uint16
438+
return UInt16(exactly: value)
524439
}
525440

526441
internal func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? {
@@ -532,18 +447,7 @@ extension _XMLDecoder {
532447
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
533448
}
534449

535-
let number = NSNumber(value: value)
536-
537-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
538-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
539-
}
540-
541-
let uint32 = number.uint32Value
542-
guard NSNumber(value: uint32) == number else {
543-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
544-
}
545-
546-
return uint32
450+
return UInt32(exactly: value)
547451
}
548452

549453
internal func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? {
@@ -555,74 +459,31 @@ extension _XMLDecoder {
555459
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
556460
}
557461

558-
let number = NSNumber(value: value)
559-
560-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
561-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
562-
}
563-
564-
let uint64 = number.uint64Value
565-
guard NSNumber(value: uint64) == number else {
566-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number <\(number)> does not fit in \(type)."))
567-
}
568-
569-
return uint64
462+
return UInt64(exactly: value)
570463
}
571464

572465
internal func unbox(_ value: Any, as type: Float.Type) throws -> Float? {
573466
guard !(value is NSNull) else { return nil }
574467

575468
guard let string = value as? String else { return nil }
576469

577-
if let value = Double(string) {
578-
let number = NSNumber(value: value)
579-
580-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
581-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
582-
}
583-
584-
let double = number.doubleValue
585-
guard abs(double) <= Double(Float.greatestFiniteMagnitude) else {
586-
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed XML number \(number) does not fit in \(type)."))
587-
}
588-
589-
return Float(double)
590-
} else if case let .convertFromString(posInfString, negInfString, nanString) = self.options.nonConformingFloatDecodingStrategy {
591-
if string == posInfString {
592-
return Float.infinity
593-
} else if string == negInfString {
594-
return -Float.infinity
595-
} else if string == nanString {
596-
return Float.nan
597-
}
470+
guard let value = Float(string) else {
471+
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
598472
}
599473

600-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
474+
return value
601475
}
602476

603477
internal func unbox(_ value: Any, as type: Double.Type) throws -> Double? {
604478
guard !(value is NSNull) else { return nil }
605479

606480
guard let string = value as? String else { return nil }
607481

608-
if let number = Decimal(string: string) as NSDecimalNumber? {
609-
610-
guard number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
611-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
612-
}
613-
614-
return number.doubleValue
615-
} else if case let .convertFromString(posInfString, negInfString, nanString) = self.options.nonConformingFloatDecodingStrategy {
616-
if string == posInfString {
617-
return Double.infinity
618-
} else if string == negInfString {
619-
return -Double.infinity
620-
} else if string == nanString {
621-
return Double.nan
622-
}
482+
guard let value = Double(string) else {
483+
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: string)
623484
}
624485

625-
throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
486+
return value
626487
}
627488

628489
internal func unbox(_ value: Any, as type: String.Type) throws -> String? {

Sources/XMLCoding/Encoder/XMLEncoder.swift

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -852,35 +852,15 @@ extension _XMLEncoder {
852852

853853
internal func box(_ value: Float) throws -> NSObject {
854854
if value.isInfinite || value.isNaN {
855-
guard case let .convertToString(positiveInfinity: posInfString, negativeInfinity: negInfString, nan: nanString) = self.options.nonConformingFloatEncodingStrategy else {
856-
throw EncodingError._invalidFloatingPointValue(value, at: codingPath)
857-
}
858-
859-
if value == Float.infinity {
860-
return posInfString as NSObject
861-
} else if value == -Float.infinity {
862-
return negInfString as NSObject
863-
} else {
864-
return nanString as NSObject
865-
}
855+
throw EncodingError._invalidFloatingPointValue(value, at: codingPath)
866856
} else {
867857
return NSNumber(value: value)
868858
}
869859
}
870860

871861
internal func box(_ value: Double) throws -> NSObject {
872862
if value.isInfinite || value.isNaN {
873-
guard case let .convertToString(positiveInfinity: posInfString, negativeInfinity: negInfString, nan: nanString) = self.options.nonConformingFloatEncodingStrategy else {
874-
throw EncodingError._invalidFloatingPointValue(value, at: codingPath)
875-
}
876-
877-
if value == Double.infinity {
878-
return posInfString as NSObject
879-
} else if value == -Double.infinity {
880-
return negInfString as NSObject
881-
} else {
882-
return nanString as NSObject
883-
}
863+
throw EncodingError._invalidFloatingPointValue(value, at: codingPath)
884864
} else {
885865
return NSNumber(value: value)
886866
}
@@ -897,12 +877,12 @@ extension _XMLEncoder {
897877
return NSNumber(value: value.timeIntervalSince1970 * 1000.0)
898878
case .iso8601:
899879
if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) {
900-
return _iso8601Formatter.string(from: value) as NSObject
880+
return NSString(string: _iso8601Formatter.string(from: value))
901881
} else {
902882
fatalError("ISO8601DateFormatter is unavailable on this platform.")
903883
}
904884
case .formatted(let formatter):
905-
return formatter.string(from: value) as NSObject
885+
return NSString(string: formatter.string(from: value))
906886
case .custom(let closure):
907887
let depth = self.storage.count
908888
try closure(value, self)
@@ -919,7 +899,7 @@ extension _XMLEncoder {
919899
try value.encode(to: self)
920900
return self.storage.popContainer()
921901
case .base64:
922-
return value.base64EncodedString() as NSObject
902+
return NSString(string: value.base64EncodedString())
923903
case .custom(let closure):
924904
let depth = self.storage.count
925905
try closure(value, self)

0 commit comments

Comments
 (0)