// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef THIRD_PARTY_CREDENTIO_GENERATOR_GENERATOR_FACTORY_H_
#define THIRD_PARTY_CREDENTIO_GENERATOR_GENERATOR_FACTORY_H_

#include <memory>

#include "absl/status/statusor.h"
#include "generator/generator.h"
#include "generator/generator_options.h"

namespace credentio {

// Creates a ManifestStoreGenerator based on the given options.
//
// The returned generator delegates full manifest store generation and
// finalization to an internal generator using `options.signing_claim_signer`,
// and delegates manifest store template generation to an internal generator
// using `options.template_claim_signer`.
absl::StatusOr<std::unique_ptr<ManifestStoreGenerator>> CreateGenerator(
    GeneratorOptions options);

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_GENERATOR_GENERATOR_FACTORY_H_
