@@ -2087,3 +2087,58 @@ extension Scanner {
2087
2087
return result
2088
2088
}
2089
2089
}
2090
+
2091
+ extension Decimal : Codable {
2092
+ private enum CodingKeys : Int , CodingKey {
2093
+ case exponent
2094
+ case length
2095
+ case isNegative
2096
+ case isCompact
2097
+ case mantissa
2098
+ }
2099
+
2100
+ public init ( from decoder: Decoder ) throws {
2101
+ let container = try decoder. container ( keyedBy: CodingKeys . self)
2102
+ let exponent = try container. decode ( CInt . self, forKey: . exponent)
2103
+ let length = try container. decode ( CUnsignedInt . self, forKey: . length)
2104
+ let isNegative = try container. decode ( Bool . self, forKey: . isNegative)
2105
+ let isCompact = try container. decode ( Bool . self, forKey: . isCompact)
2106
+
2107
+ var mantissaContainer = try container. nestedUnkeyedContainer ( forKey: . mantissa)
2108
+ var mantissa : ( CUnsignedShort , CUnsignedShort , CUnsignedShort , CUnsignedShort ,
2109
+ CUnsignedShort , CUnsignedShort , CUnsignedShort , CUnsignedShort ) = ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 )
2110
+ mantissa. 0 = try mantissaContainer. decode ( CUnsignedShort . self)
2111
+ mantissa. 1 = try mantissaContainer. decode ( CUnsignedShort . self)
2112
+ mantissa. 2 = try mantissaContainer. decode ( CUnsignedShort . self)
2113
+ mantissa. 3 = try mantissaContainer. decode ( CUnsignedShort . self)
2114
+ mantissa. 4 = try mantissaContainer. decode ( CUnsignedShort . self)
2115
+ mantissa. 5 = try mantissaContainer. decode ( CUnsignedShort . self)
2116
+ mantissa. 6 = try mantissaContainer. decode ( CUnsignedShort . self)
2117
+ mantissa. 7 = try mantissaContainer. decode ( CUnsignedShort . self)
2118
+
2119
+ self . init ( _exponent: exponent,
2120
+ _length: length,
2121
+ _isNegative: CUnsignedInt ( isNegative ? 1 : 0 ) ,
2122
+ _isCompact: CUnsignedInt ( isCompact ? 1 : 0 ) ,
2123
+ _reserved: 0 ,
2124
+ _mantissa: mantissa)
2125
+ }
2126
+
2127
+ public func encode( to encoder: Encoder ) throws {
2128
+ var container = encoder. container ( keyedBy: CodingKeys . self)
2129
+ try container. encode ( _exponent, forKey: . exponent)
2130
+ try container. encode ( _length, forKey: . length)
2131
+ try container. encode ( _isNegative == 0 ? false : true , forKey: . isNegative)
2132
+ try container. encode ( _isCompact == 0 ? false : true , forKey: . isCompact)
2133
+
2134
+ var mantissaContainer = container. nestedUnkeyedContainer ( forKey: . mantissa)
2135
+ try mantissaContainer. encode ( _mantissa. 0 )
2136
+ try mantissaContainer. encode ( _mantissa. 1 )
2137
+ try mantissaContainer. encode ( _mantissa. 2 )
2138
+ try mantissaContainer. encode ( _mantissa. 3 )
2139
+ try mantissaContainer. encode ( _mantissa. 4 )
2140
+ try mantissaContainer. encode ( _mantissa. 5 )
2141
+ try mantissaContainer. encode ( _mantissa. 6 )
2142
+ try mantissaContainer. encode ( _mantissa. 7 )
2143
+ }
2144
+ }
0 commit comments