public static Task <ILookupInResult> LookupInAsync(this ICouchbaseCollection collection, string id,
                                                           Action <LookupInSpecBuilder> configureBuilder, LookupInOptions?options)
        {
            var lookupInSpec = new LookupInSpecBuilder();

            configureBuilder(lookupInSpec);

            return(collection.LookupInAsync(id, lookupInSpec.Specs, options));
        }
        public static Task <ILookupInResult> LookupInAsync(this ICouchbaseCollection collection, string id,
                                                           Action <LookupInSpecBuilder> configureBuilder)
        {
            var builder = new LookupInSpecBuilder();

            configureBuilder(builder);

            return(collection.LookupInAsync(id, builder.Specs, LookupInOptions.Default));
        }
        public static async Task <ILookupInResult <TDocument> > LookupInAsync <TDocument>(this ICouchbaseCollection collection,
                                                                                          string id, Action <LookupInSpecBuilder <TDocument> > configureBuilder, LookupInOptions?options = null)
        {
            var serializer = options?.SerializerValue ??
                             collection.Scope.Bucket.Cluster.ClusterServices.GetRequiredService <ITypeSerializer>();

            var specBuilder = new LookupInSpecBuilder <TDocument>(serializer);

            configureBuilder(specBuilder);

            return(new LookupInResult <TDocument>(await collection.LookupInAsync(id, specBuilder.Specs, options)
                                                  .ConfigureAwait(false)));
        }
        public static Task <ILookupInResult> LookupInAsync(this ICollection collection, string id,
                                                           Action <LookupInSpecBuilder> configureBuilder, Action <LookupInOptions> configureOptions)
        {
            var builder = new LookupInSpecBuilder();

            configureBuilder(builder);

            var options = new LookupInOptions();

            configureOptions(options);

            return(collection.LookupInAsync(id, builder.Specs, options));
        }
        public static LookupInSpecBuilder <TDocument> Count <TDocument, TContent>(this LookupInSpecBuilder <TDocument> builder,
                                                                                  Expression <Func <TDocument, TContent> > path)
        {
            // ReSharper disable ConditionIsAlwaysTrueOrFalse
            if (builder == null)
            {
                ThrowHelper.ThrowArgumentNullException(nameof(builder));
            }
            if (path == null)
            {
                ThrowHelper.ThrowArgumentNullException(nameof(path));
            }
            // ReSharper restore ConditionIsAlwaysTrueOrFalse

            return((LookupInSpecBuilder <TDocument>)builder.Count(SubDocumentPathExpressionVisitor.GetPath(builder, path)));
        }