in foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs [97:176]
private static Permissions MapPermissions(ReadOnlySpan<byte> bytes)
{
var streamMap = new Dictionary<int, StreamPermissions>();
int index = 0;
var globalPermissions = new GlobalPermissions
{
ManageServers = bytes[index++] == 1,
ReadServers = bytes[index++] == 1,
ManageUsers = bytes[index++] == 1,
ReadUsers = bytes[index++] == 1,
ManageStreams = bytes[index++] == 1,
ReadStreams = bytes[index++] == 1,
ManageTopics = bytes[index++] == 1,
ReadTopics = bytes[index++] == 1,
PollMessages = bytes[index++] == 1,
SendMessages = bytes[index++] == 1,
};
if (bytes[index++] == 1)
{
while (true)
{
var streamId = BinaryPrimitives.ReadInt32LittleEndian(bytes[index..(index + 4)]);
index += sizeof(int);
var manageStream = bytes[index++] == 1;
var readStream = bytes[index++] == 1;
var manageTopics = bytes[index++] == 1;
var readTopics = bytes[index++] == 1;
var pollMessagesStream = bytes[index++] == 1;
var sendMessagesStream = bytes[index++] == 1;
var topicsMap = new Dictionary<int, TopicPermissions>();
if (bytes[index++] == 1)
{
while (true)
{
var topicId = BinaryPrimitives.ReadInt32LittleEndian(bytes[index..(index + 4)]);
index += sizeof(int);
var manageTopic = bytes[index++] == 1;
var readTopic = bytes[index++] == 1;
var pollMessagesTopic = bytes[index++] == 1;
var sendMessagesTopic = bytes[index++] == 1;
topicsMap.Add(topicId, new TopicPermissions
{
ManageTopic = manageTopic,
ReadTopic = readTopic,
PollMessages = pollMessagesTopic,
SendMessages = sendMessagesTopic,
});
if (bytes[index++] == 0)
break;
}
}
streamMap.Add(streamId, new StreamPermissions
{
ManageStream = manageStream,
ReadStream = readStream,
ManageTopics = manageTopics,
ReadTopics = readTopics,
PollMessages = pollMessagesStream,
SendMessages = sendMessagesStream,
Topics = topicsMap.Count > 0 ? topicsMap : null,
});
if (bytes[index++] == 0)
break;
}
}
return new Permissions
{
Global = globalPermissions,
Streams = streamMap.Count > 0 ? streamMap : null
};
}