/// <summary>
        /// Implements "a tuple" that encodes the desired (de)serialization choice and streaming preference.
        /// </summary>
        /// <param name="preferStreaming">Is streaming to be preferred.</param>
        /// <param name="deserializer">The <see cref="IStorageDeserializer"/> used.</param>
        /// <param name="serializer"><see cref="IStorageSerializer"/> used.</param>
        /// <remarks>Note that only one, either <paramref name="deserializer"/> or <paramref name="serializer"/> can be defined, not both.</remarks>
        public SerializationChoice(bool preferStreaming, IStorageDeserializer deserializer, IStorageSerializer serializer)
        {
            if (deserializer == null && serializer == null)
            {
                throw new ArgumentException($"Either {nameof(deserializer)} or {nameof(serializer)} needs to be defined (not both).");
            }

            if (deserializer != null && serializer != null)
            {
                throw new ArgumentException($"Either {nameof(deserializer)} or {nameof(serializer)} needs to be defined (not both).");
            }

            PreferStreaming = preferStreaming;
            Deserializer    = deserializer;
            Serializer      = serializer;
        }
        /// <summary>
        /// Implements "a tuple" that encodes the desired (de)serialization choice and streaming preference.
        /// </summary>
        /// <param name="preferStreaming">Is streaming to be preferred.</param>
        /// <param name="deserializer">The <see cref="IStorageDeserializer"/> used.</param>
        /// <param name="serializer"><see cref="IStorageSerializer"/> used.</param>
        /// <remarks>Note that only one, either <paramref name="deserializer"/> or <paramref name="serializer"/> can be defined, not both.</remarks>
        public SerializationChoice(bool preferStreaming, IStorageDeserializer deserializer, IStorageSerializer serializer)
        {
            if(deserializer == null && serializer == null)
            {
                throw new ArgumentException($"Either {nameof(deserializer)} or {nameof(serializer)} needs to be defined (not both).");
            }

            if(deserializer != null && serializer != null)
            {
                throw new ArgumentException($"Either {nameof(deserializer)} or {nameof(serializer)} needs to be defined (not both).");
            }

            PreferStreaming = preferStreaming;
            Deserializer = deserializer;
            Serializer = serializer;
        }