function parseSegment(buffer, offset) {
    let typeKey = buffer[offset];

    if (typeKey <= 20) {
        if (buffer[offset + 1] == undefined) throw new Error("ParseError: No value for uint8");
        return { typeKey: typeKey, value: buffer[offset + 1], bufferLength: 2 };
    }
    if (typeKey <= 40) {
        if (buffer[offset + 2] == undefined) throw new Error("ParseError: Incomplete value for uint16");
        return { typeKey: typeKey, value: buffer.readUInt16BE(offset + 1), bufferLength: 3 };
    }
    else if (typeKey <= 90) {
        if (buffer[offset + 4] == undefined) throw new Error("ParseError: Incomplete value for uint32");
        return { typeKey: typeKey, value: buffer.readUInt32BE(offset + 1), bufferLength: 5 };
    }
    else if (typeKey <= 155) {
        if (buffer[offset + 1] == undefined) throw new Error("ParseError: Incomplete length value for string");
        let len = buffer.readUInt8(offset + 1);
        if (buffer[offset + 1 + len] == undefined) throw new Error("ParseError: Incomplete value for string");
        let value = buffer.toString("utf8", offset + 2, offset + 2 + len);

        return { typeKey: typeKey, value: value, bufferLength: 2 + len };
    }
    else if (typeKey <= 165) {
        if (buffer[offset + 16] == undefined) throw new Error("ParseError: Incomplete value for uuid");
        let len = 16;
        let value = new Buffer(len);
        buffer.copy(value, 0, offset + 1, offset + 1 + len);

        return { typeKey: typeKey, value: value, bufferLength: 1 + len };
    }
    else if (typeKey <= 180) {
        if (buffer[offset + 1] == undefined) throw new Error("ParseError: Incomplete length value for byte string");
        let len = buffer.readUInt8(offset + 1);
        if (buffer[offset + len + 1] == undefined) throw new Error("ParseError: Incomplete value for byte string");
        let value = new Buffer(len);
        buffer.copy(value, 0, offset + 2, offset + 2 + len);

        return { typeKey: typeKey, value: value, bufferLength: 2 + len };
    }
    else {
        throw new Error("typeKey not supported");
    }
}