foreign/csharp/Iggy_SDK_Tests/Utils/Users/PermissionsFactory.cs (147 lines of code) (raw):

using Iggy_SDK.Contracts.Http; using System.Buffers.Binary; namespace Iggy_SDK_Tests.Utils.Users; internal static class PermissionsFactory { internal static Permissions CreatePermissions() { return new Permissions { Global = new GlobalPermissions { ManageServers = Random.Shared.Next() % 2 == 0, ReadServers = Random.Shared.Next() % 2 == 0, ManageUsers = Random.Shared.Next() % 2 == 0, ReadUsers = Random.Shared.Next() % 2 == 0, ManageStreams = Random.Shared.Next() % 2 == 0, ReadStreams = Random.Shared.Next() % 2 == 0, ManageTopics = Random.Shared.Next() % 2 == 0, ReadTopics = Random.Shared.Next() % 2 == 0, PollMessages = Random.Shared.Next() % 2 == 0, SendMessages = Random.Shared.Next() % 2 == 0 }, Streams = new Dictionary<int, StreamPermissions> { { Random.Shared.Next(1,69), new StreamPermissions { ManageStream = Random.Shared.Next() % 2 == 0, ReadStream = Random.Shared.Next() % 2 == 0, ManageTopics = Random.Shared.Next() % 2 == 0, ReadTopics = Random.Shared.Next() % 2 == 0, PollMessages = Random.Shared.Next() % 2 == 0, SendMessages = Random.Shared.Next() % 2 == 0, Topics = new Dictionary<int, TopicPermissions> { { Random.Shared.Next(1,69), new TopicPermissions { ManageTopic = Random.Shared.Next() % 2 == 0, ReadTopic = Random.Shared.Next() % 2 == 0, PollMessages = Random.Shared.Next() % 2 == 0, SendMessages = Random.Shared.Next() % 2 == 0 } }, { Random.Shared.Next(1,69), new TopicPermissions { ManageTopic = Random.Shared.Next() % 2 == 0, ReadTopic = Random.Shared.Next() % 2 == 0, PollMessages = Random.Shared.Next() % 2 == 0, SendMessages = Random.Shared.Next() % 2 == 0 } } } } }, { Random.Shared.Next(1,69), new StreamPermissions { ManageStream = Random.Shared.Next() % 2 == 0, ReadStream = Random.Shared.Next() % 2 == 0, ManageTopics = Random.Shared.Next() % 2 == 0, ReadTopics = Random.Shared.Next() % 2 == 0, PollMessages = Random.Shared.Next() % 2 == 0, SendMessages = Random.Shared.Next() % 2 == 0, Topics = null } } } }; } internal static Permissions PermissionsFromBytes(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 }; } }