internal static AudioMessage Convert(IAudioMessage message)
        {
            if (message.Url == null)
                throw new InvalidOperationException("The url cannot be null.");

            if (message.Duration == 0)
                throw new InvalidOperationException("The duration should be at least 1 millisecond.");

            if (message is AudioMessage audioMessage)
                return audioMessage;

            return new AudioMessage()
            {
                Url = message.Url,
                Duration = message.Duration
            };
        }
        public static AudioMessage ToAudioMessage(this IAudioMessage self)
        {
            if (self.Url == null)
            {
                throw new InvalidOperationException("The url cannot be null.");
            }

            if (self.Duration == 0)
            {
                throw new InvalidOperationException("The duration should be at least 1 millisecond.");
            }

            if (self is AudioMessage audioMessage)
            {
                return(audioMessage);
            }

            return(new AudioMessage()
            {
                Url = self.Url,
                Duration = self.Duration
            });
        }