public static MongoUrl CreateUrl(this CallistoConnectorOptions options, ApplicationOptions app)
        {
            var builder = new MongoUrlBuilder();

            builder.Parse(options.ConnectionString);
            if (Check.IsNull(app) || app.ApplicationName.IsNullOrEmpty())
            {
                builder.ApplicationName = options.ApplicationName;
            }
            else
            {
                builder.ApplicationName = app.ApplicationName;
            }

            builder.ConnectTimeout = options.ConnectTimeout.IsNullOrEmpty()
                                         ? MongoDefaults.ConnectTimeout
                                         : options.ConnectTimeout.ToTimeSpan();

            builder.MaxConnectionIdleTime = options.MaxConnectionIdleTime.IsNullOrEmpty()
                                                ? MongoDefaults.MaxConnectionIdleTime
                                                : options.MaxConnectionIdleTime.ToTimeSpan();

            builder.MaxConnectionLifeTime = options.MaxConnectionLifeTime.IsNullOrEmpty()
                                                ? MongoDefaults.MaxConnectionLifeTime
                                                : options.MaxConnectionLifeTime.ToTimeSpan();

            builder.MaxConnectionPoolSize =
                options.MaxConnectionPoolSize == 0 ? MongoDefaults.MaxConnectionPoolSize : options.MaxConnectionPoolSize;

            builder.MinConnectionPoolSize =
                options.MinConnectionPoolSize == 0 ? MongoDefaults.MinConnectionPoolSize : options.MinConnectionPoolSize;

            builder.HeartbeatInterval = options.HeartbeatInterval.IsNullOrEmpty()
                                            ? TimeSpan.FromSeconds(60)
                                            : options.HeartbeatInterval.ToTimeSpan();

            builder.HeartbeatTimeout = options.HeartbeatTimeout.IsNullOrEmpty()
                                           ? TimeSpan.FromSeconds(60)
                                           : options.HeartbeatTimeout.ToTimeSpan();

            builder.LocalThreshold = options.LocalThreshold.IsNullOrEmpty()
                                         ? MongoDefaults.LocalThreshold
                                         : options.LocalThreshold.ToTimeSpan();

            builder.RetryWrites = options.RetryWrites;

            builder.ServerSelectionTimeout = options.ServerSelectionTimeout.IsNullOrEmpty()
                                                 ? MongoDefaults.ServerSelectionTimeout
                                                 : options.ServerSelectionTimeout.ToTimeSpan();

            builder.SocketTimeout = options.SocketTimeout.IsNullOrEmpty()
                                        ? MongoDefaults.SocketTimeout
                                        : options.SocketTimeout.ToTimeSpan();


            builder.WaitQueueTimeout = options.WaitQueueTimeout.IsNullOrEmpty()
                                           ? MongoDefaults.WaitQueueTimeout
                                           : options.WaitQueueTimeout.ToTimeSpan();

            builder.IPv6 = options.Ipv6;

            return(builder.ToMongoUrl());
        }