package com.atlassian.bitbucket.mesh.git.builder.catfile;

import javax.annotation.Nonnull;

/**
 * A builder to construct a git command for running {@code git cat-file}.
 */
public interface GitCatFile {

    /**
     * Construct a builder for running cat-file in batch mode, which prints object type, size and content.
     *
     * @return a builder for {@code git cat-file --batch}
     */
    @Nonnull
    GitCatFileBatchBuilder batch();

    /**
     * Construct a builder for running cat-file in batch-check mode, which prints object type and size (no content).
     *
     * @return a builder for {@code git cat-file --batch-check}
     */
    @Nonnull
    GitCatFileBatchBuilder batchCheck();

    /**
     * Construct a cat-file builder which pretty prints the content of an object
     *
     * @return a builder for {@code git cat-file -p}
     */
    @Nonnull
    GitCatFilePrettyBuilder pretty();

    /**
     * Constructs a cat-file builder which prints the type of an object (no content)
     *
     * @return a builder for {@code git cat-file -t}
     */
    @Nonnull
    GitCatFileTypeBuilder type();
}
