Sources/sdk-core-swift/objectmodel/XyoObjectSchema.swift
//
// XyoObjectSchema.swift
// sdk-objectmodel-swift
//
// Created by Carter Harrison on 1/21/19.
// Copyright © 2019 XYO Network. All rights reserved.
//
import Foundation
public struct XyoObjectSchema {
public let id: UInt8
public let encodingCatalogue: UInt8
public init(id: UInt8, encodingCatalogue: UInt8) {
self.id = id
self.encodingCatalogue = encodingCatalogue
}
public func getSizeIdentifier () -> XyoObjectSize {
// masking the first two bits to get the result
// 0xC0 == 11000000
if encodingCatalogue & 0xc0 == 0x00 {
return XyoObjectSize.ONE
}
if encodingCatalogue & 0xc0 == 0x40 {
return XyoObjectSize.TWO
}
if encodingCatalogue & 0xc0 == 0x80 {
return XyoObjectSize.FOUR
}
return XyoObjectSize.EIGHT
}
public func getIsIterable() -> Bool {
return encodingCatalogue & 0x20 != 0
}
public func getIsTypedIterable() -> Bool {
return encodingCatalogue & 0x10 != 0
}
public func toByteArray () -> [UInt8] {
return [encodingCatalogue, id]
}
public static func create (id: UInt8,
isIterable: Bool,
isTypedIterable: Bool,
sizeIdentifier: XyoObjectSize) -> XyoObjectSchema {
let iterableByte: UInt8 = getIterableByte(isIterable: isIterable)
let isTypedIterableByte: UInt8 = getIsTypedByte(isTyped: isTypedIterable)
let sizeIdentifierByte: UInt8 = getSizeIdentifierByte(sizeIdentifier: sizeIdentifier)
let encodingCatalogue: UInt8 = iterableByte | isTypedIterableByte | sizeIdentifierByte
return XyoObjectSchema(id: id, encodingCatalogue: encodingCatalogue)
}
private static func getIterableByte(isIterable: Bool) -> UInt8 {
if isIterable {
return 0x20
}
return 0x00
}
private static func getIsTypedByte (isTyped: Bool) -> UInt8 {
if isTyped {
return 0x10
}
return 0x00
}
private static func getSizeIdentifierByte (sizeIdentifier: XyoObjectSize) -> UInt8 {
switch sizeIdentifier {
case XyoObjectSize.ONE:
return 0x00
case XyoObjectSize.TWO:
return 0x40
case XyoObjectSize.FOUR:
return 0x80
case XyoObjectSize.EIGHT:
return 0xc0
}
}
}