Decoder approach is kept.
Signed-off-by: Adam Rocska <adam.rocska@adams.solutions>
This commit is contained in:
parent
a3eaa2b8c9
commit
d71a736207
|
@ -0,0 +1,11 @@
|
|||
import Foundation
|
||||
|
||||
class MaxMindDecoder {
|
||||
|
||||
enum Endianness { case big, little }
|
||||
|
||||
let input: Endianness
|
||||
|
||||
init(inputEndianness: Endianness) { self.input = inputEndianness }
|
||||
|
||||
}
|
|
@ -1,17 +1,6 @@
|
|||
import Foundation
|
||||
|
||||
/**
|
||||
# NumericDecoder
|
||||
Unit capable of decoding MaxMind DB's specific unorthodox way of storing data.
|
||||
It's able to unpack the php style random byte sized "strongly typed" values.
|
||||
*/
|
||||
class NumericDecoder {
|
||||
|
||||
enum Endianness { case big, little }
|
||||
|
||||
private let input: Endianness
|
||||
|
||||
init(inputEndianness: Endianness) { self.input = inputEndianness }
|
||||
extension MaxMindDecoder {
|
||||
|
||||
private func getLeadingByte(_ data: Data) -> Data.Element? {
|
||||
return input == .big ? data.first : data.last
|
||||
|
@ -64,4 +53,3 @@ class NumericDecoder {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import Foundation
|
||||
|
||||
extension MaxMindDecoder {
|
||||
func decode(_ data: Data) -> String {
|
||||
return String(data: data, encoding: .utf8) ?? ""
|
||||
}
|
||||
}
|
|
@ -4,8 +4,8 @@ import XCTest
|
|||
|
||||
class NumericDecoderTest: XCTestCase {
|
||||
|
||||
private let bigEndianDecoder = NumericDecoder(inputEndianness: .big)
|
||||
private let littleEndianDecoder = NumericDecoder(inputEndianness: .little)
|
||||
private let bigEndianDecoder = MaxMindDecoder(inputEndianness: .big)
|
||||
private let littleEndianDecoder = MaxMindDecoder(inputEndianness: .little)
|
||||
|
||||
func testDecode_uInt16() {
|
||||
for (expected, input) in testSpecs_uInt16 {
|
||||
|
|
Loading…
Reference in New Issue