/// <summary>
 /// Serialise object into FileZilla binary data
 /// </summary>
 /// <param name="writer">Binary writer to write data to</param>
 /// <param name="protocolVersion">Current FileZilla protocol version</param>
 /// <param name="index">The 0 based index of this item in relation to any parent list</param>
 public void Serialize(BinaryWriter writer, int protocolVersion, int index)
 {
     var options = (byte)(((byte)SpeedLimitType & 0x3) | ((byte)BypassServerSpeedLimit << 2));
     writer.Write(options);
     writer.WriteBigEndianInt16(ConstantSpeedLimit);
     writer.WriteList16(SpeedLimitRules, protocolVersion);
 }
        /// <summary>
        /// Serialise object into FileZilla binary data
        /// </summary>
        /// <param name="writer">Binary writer to write data to</param>
        /// <param name="protocolVersion">Current FileZilla protocol version</param>
        /// <param name="index">The 0 based index of this item in relation to any parent list</param>
        public void Serialize(BinaryWriter writer, int protocolVersion, int index = 0)
        {
            // Check Uniqueness of groups
            if(Groups.GroupBy(x=>x.GroupName).Any(x => x.Count() > 1))
                throw new ApiException("Group names must be unique");

            if(protocolVersion < ProtocolVersions.User16M)
                writer.WriteList16(Groups, protocolVersion);
            else
                writer.WriteList24(Groups, protocolVersion);

            // Check Uniqueness of users
            if (Users.GroupBy(x => x.UserName).Any(x => x.Count() > 1))
                throw new ApiException("User names must be unique");

            if (protocolVersion < ProtocolVersions.User16M)
                writer.WriteList16(Users, protocolVersion);
            else
                writer.WriteList24(Users, protocolVersion);
        }
 /// <summary>
 /// Serialise object into FileZilla binary data
 /// </summary>
 /// <param name="writer">Binary writer to write data to</param>
 /// <param name="protocolVersion">Current FileZilla protocol version</param>
 /// <param name="index">The 0 based index of this item in relation to any parent list</param>
 public virtual void Serialize(BinaryWriter writer, int protocolVersion, int index)
 {
     writer.WriteText(GroupName);
     writer.Write(IpLimit);
     writer.Write(UserLimit);
     byte options = (byte)(((byte)BypassUserLimit & 0x3) | ((byte)Enabled << 2));
     writer.Write(options);
     writer.WriteTextList(DisallowedIPs);
     writer.WriteTextList(AllowedIPs);
     writer.Write(EightPlusThree);
     writer.WriteList16(SharedFolders, protocolVersion);
     writer.Write(DownloadSpeedLimit, protocolVersion);
     writer.Write(UploadSpeedLimit, protocolVersion);
     writer.WriteText(Comment);
     writer.Write(ForceSsl);
 }
        /// <summary>
        /// Serialise object into FileZilla binary data
        /// </summary>
        /// <param name="writer">Binary writer to write data to</param>
        /// <param name="protocolVersion">Current FileZilla protocol version</param>
        /// <param name="index">The 0 based index of this item in relation to any parent list</param>
        public virtual void Serialize(BinaryWriter writer, int protocolVersion, int index)
        {
            // Switch user Enabled 'Default' to 'Yes' when not assigned a group.
            if (Enabled == TriState.Default && GetType() == typeof(User) && string.IsNullOrEmpty(GroupName))
                Enabled=TriState.Yes;

            writer.WriteText(GroupName);
            writer.Write(IpLimit);
            writer.Write(UserLimit);
            byte options = (byte)(((byte)BypassUserLimit & 0x3) | ((byte)Enabled << 2));
            writer.Write(options);
            writer.WriteTextList(DisallowedIPs);
            writer.WriteTextList(AllowedIPs);
            if (protocolVersion < ProtocolVersions.Sha512)
            {
                writer.Write(EightPlusThree);
            }
            writer.WriteList16(SharedFolders, protocolVersion);
            writer.Write(DownloadSpeedLimit, protocolVersion);
            writer.Write(UploadSpeedLimit, protocolVersion);
            writer.WriteText(Comment);
            writer.Write(ForceSsl);
        }
 /// <summary>
 /// Serialise object into FileZilla binary data
 /// </summary>
 /// <param name="writer">Binary writer to write data to</param>
 /// <param name="protocolVersion">Current FileZilla protocol version</param>
 /// <param name="index">The 0 based index of this item in relation to any parent list</param>
 public void Serialize(BinaryWriter writer, int protocolVersion, int index = 0)
 {
     writer.WriteList16(Options, protocolVersion);
     writer.WriteList16(DownloadSpeedLimitRule, protocolVersion);
     writer.WriteList16(UploadSpeedLimitRule, protocolVersion);
 }